繁体   English   中英

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

[英]Why don't the configuration values in my appsettings.json file map to my custom POCO object's fields via Configuration.GetSection().Get<MyObject>?

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

{
  "PocoSettings": {
    "ValueOne": "Foo",
    "ValueTwo": "Bar"
  }
}

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

public class PocoSettings
{
    public string ValueOne;
    public string ValueTwo;
}

我尝试在我的 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.
}

MySettings对象已创建,但未填充值。 ValueOneValueTwo均为空。 为什么?

配置扩展需要显式公共 getter 和 setter。 如果它们是隐式的,或者 get 或 set 是私有的,则不会映射 POCO 对象。 该课程应阅读:

public class PocoSettings
{
    public string ValueOne { get; set; }
    public string ValueTwo { get; set; }
}

尝试这个:

PocoSettings MySettings = this.Configuration.Get<PocoSettings>();

我使用以下 ConfigurationBuilder 和我的 SectionsCollection 类对其进行测试。

var baseConfig = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("mySettings.json")
        .Build();
SectionsCollection sectionsCollection = baseConfig.Get<SectionsCollection>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM