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

C# IConfiguration.GetSection()作为属性返回null,c#,asp.net-core,as-operator,C#,Asp.net Core,As Operator,我正在尝试检索应用程序中的配置 我已将IConfiguration传递到服务类中,该类需要拉取一些设置 该类看起来有点像这样: private IConfiguration _configuration; public Config(IConfiguration configuration) { _configuration = configuration; } public POCO GetSettingsConfiguration() { var section = _con

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

我已将IConfiguration传递到服务类中,该类需要拉取一些设置

该类看起来有点像这样:

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

    return section;
}
public class POCO
{
    public string URL { get; set; }
    public string Username { get; set; }
    public SecureString Password { get; set; }
    public string Domain { get; set; }
}
在debug中,我可以看到_配置确实包含这些设置 但是我的“section”只是返回为null

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

My appsettings.json具有以下值:

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

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

}
我的poco类如下所示:

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

    return section;
}
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>();
var section=\u configuration.GetSection(“设置”).Get();

GetSection
返回的只是一个字符串字典。您不能将其强制转换到您的POCO类。

IConfiguration
IConfigurationSection
具有用于此目的的扩展方法:

var-poco=new-poco();
_configuration.GetSection(“设置”).Bind(poco);
或者只是

var poco=_configuration.GetSection(“设置”).Get(typeof(poco));
或泛型

var poco=\u configuration.GetSection(“设置”).Get();

以操作员的身份阅读
:在GetSelection之后,我没有.Get选项。它位于
Microsoft.Extensions.Configuration
命名空间中。我不知道你怎么还没有使用它,但是如果你没有,添加一个。否则,您的项目出现严重问题。可以使用Microsoft.Extensions.Configuration确认其
。类库以.NETCore2.2为目标,不知道该告诉您什么。就在那儿。确保您的项目正在正确生成。添加nuget软件包
Microsoft.extensions.Configurations.Binding
后,它工作正常