IOptions 绑定不适用于嵌套类

Aaa*_*aaa 5 c# configuration .net-core

我有一个工作者服务 ind dotnet core 3.1:

程序.cs:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    var builder = new ConfigurationBuilder()
                        .AddJsonFile("appsettings.json", optional: false)
                        .AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true)
                        .AddEnvironmentVariables();

                    var configuration = builder.Build();

                    services.AddOptions();

                    // Version 1
                    services.Configure<A>(configuration);

                    // Version 2
                    //services.Configure<A>(o => configuration.GetSection("PollingSettings").Bind(o));

                    services.AddHostedService<Worker>();
                })
                .UseWindowsService();
    }
Run Code Online (Sandbox Code Playgroud)

appsettings.Development.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "A": {
    "option1": "value1_from_json",
    "option2": -1,
    "BSettings": [
      {
        "Option1": "xxx",
        "Option2": 1
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

A.cs:

public class A
{
    public A()
    {
        Option1 = "value1_from_ctor";
        BSettings = new List<B>();
    }

    public string Option1 { get; set; }
    public int Option2 { get; set; } = 5;

    public List<B> BSettings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

B.cs:

public class B
{
    public string Option1 { get; set; }
    public int Option2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

版本 1:当我注入IOptions<A>Worker 类时,我从 ctor 中获取默认值,尽管它是这样记录的: https: //learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?查看=aspnetcore-3.1

版本 2:根 Option1 和 Option2 从 appsettings 填充,但 BSettings 列表默认为空。

我有什么错吗?

Aaa*_*aaa 0

BSettings = new List<B>();如果我从 ctor 中删除 则版本 2 可以工作。