簡體   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