为什么我的appsettings.json文件中的配置值不通过Configuration.GetSection()。Get <MyObject>映射到自定义POCO对象的字段?

Nec*_*ras 2 .net c# configuration .net-core

我有一些appsettings.json配置文件:

{
  "PocoSettings": {
    "ValueOne": "Foo",
    "ValueTwo": "Bar"
  }
}
Run Code Online (Sandbox Code Playgroud)

以及应该填充的设置对象:

public class PocoSettings
{
    public string ValueOne;
    public string ValueTwo;
}
Run Code Online (Sandbox Code Playgroud)

我尝试将其填充到我的Startup.cs文件中:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddEnvironmentVariables();
    this.Configuration = builder.Build();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var MySettings = this.Configuration.GetSection("PocoSettings").Get<PocoSettings>();

    // Inject MySettings into your DI container of choice here.
}
Run Code Online (Sandbox Code Playgroud)

该MySettings对象被创建,但不填充值。ValueOne并且ValueTwo均为null。为什么?

Nec*_*ras 5

配置扩展需要显式的公共获取器和设置器。如果它们是隐式的,或者get或set是私有的,则不会映射POCO对象。该类应显示为:

public class PocoSettings
{
    public string ValueOne { get; set; }
    public string ValueTwo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 没有“隐式”和“显式”获取器或设置器。只有* properties *和* fields *。 (3认同)