Configuration.GetValue <t>返回null,但绑定有效

时间:2019-05-07 11:59:57

标签: c# asp.net-core .net-core appsettings

我在从appsettings.json获取数据时遇到问题。 该文件如下所示:

  "Integrations": {
    "System01": {
      "Host": "failover://(tcp://localhost:61616)?transport.timeout=2000",
      "User": "admin",
      "Password": "admin"
    },
    "System02": {
      "Host": "failover://(tcp://localhost:61616)?transport.timeout=2000",
      "User": "admin",
      "Password": "admin"
    },
  }

我有以下DTO:

public class IntegrationsConfigurationDto
{
    public string Host { get; set; }
    public string User { get; set; }
    public string Password { get; set; }
}

当尝试阅读它时:

var config = _configuration.GetValue<IntegrationsConfigurationDto>("Integrations:System01");

我得到null。但是如果我这样做:

var config = new IntegrationsConfigurationDto();
_config.Bind("Integrations:System01", config);

我在config变量中正确获取了值。

为什么会这样?在这种情况下如何使用GetValue<T>

谢谢。

1 个答案:

答案 0 :(得分:3)

GetValue仅适用于简单的值,例如stringint等-它不会遍历嵌套配置的层次结构。

引用Configuration in ASP.NET Core: GetValue

  

ConfigurationBinder.GetValue<T>从具有指定键的配置中提取一个值,并将其转换为指定的类型。如果找不到密钥,则可以通过重载提供默认值。

除了使用Bind之外,您还可以使用以下方法来避免创建自己的IntegrationsConfigurationDto实例:

var config = _configuration.GetSection("Integrations:System01")
    .Get<IntegrationsConfigurationDto>();

引用Configuration in ASP.NET Core: Bind to an object graph

  

ConfigurationBinder.Get<T>绑定并返回指定的类型。 Get<T>比使用Bind更方便。