IConfiguration.GetSection()作为属性返回null

时间:2019-01-31 13:13:34

标签: c# asp.net-core as-operator

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

我已经将IConfiguration传递到了服务类中,该服务类需要进行一些设置。

该类看起来像这样:

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

    return section;
}

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

我知道我可以尝试设置要在启动时创建的Poco,然后将其作为依赖项进行注入,但是由于设置原因,我宁愿在与注入的IConfiguration分开的类中进行操作,如果可能的话。

我的appsettings.json具有以下值:

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

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

}

我的poco课看起来像这样:

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

2 个答案:

答案 0 :(得分:2)

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>();

答案 1 :(得分:1)

您需要使用:

import matplotlib.pyplot as plt
from time import sleep
from scipy import eye

plt.imshow(eye(3))
plt.show()
sleep(1)
plt.close()

var section = _configuration.GetSection("settings").Get<POCO>(); 返回的内容只是一个字符串字典。您不能将其强制转换为POCO类。