IConfiguration.GetSection() 作为属性 returns 空

IConfiguration.GetSection() as Properties returns null

我正在尝试在我的应用程序中检索配置。

我已将 IConfiguration 传递给需要提取一些设置的服务 class。

class 看起来有点像这样:

private IConfiguration _configuration;
public Config(IConfiguration configuration)
{
    _configuration = configuration;
}
public POCO GetSettingsConfiguration()
{
    var section = _configuration.GetSection("settings") as POCO;

    return section;
}

在调试中,我可以看到 _configuration 确实包含设置 但是我的 "section" 只是返回为 null。

我知道我可以尝试将 Poco 设置为在启动时创建,然后作为依赖项注入,但由于设置原因,我宁愿单独进行 classes 来自注入的 IConfiguration,如果可能的话。

我的 appsettings.json 有这些值:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",

  "settings": {
    "Username": "user",
    "Password": "password",
    "Domain": "example.com",
    "URL": "http://service.example.com"
  }

}

我的 poco class 看起来像这样:

public class POCO
{
    public string URL { get; set; }
    public string Username { get; set; }
    public SecureString Password { get; set; }
    public string Domain { get; set; }
}

您需要使用:

var section = _configuration.GetSection("settings").Get<POCO>();

GetSection 返回的只是一个字符串字典。你不能把它投射到你的 POCO class.

IConfigurationIConfigurationSection 有一个扩展方法 Bind 用于此目的:

var poco = new POCO();
_configuration.GetSection("settings").Bind(poco);

或者只是 Get

var poco = _configuration.GetSection("settings").Get(typeof(POCO));

或通用Get

var poco = _configuration.GetSection("settings").Get<POCO>();