我在从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>
?
谢谢。
答案 0 :(得分:3)
GetValue
仅适用于简单的值,例如string
,int
等-它不会遍历嵌套配置的层次结构。
引用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
更方便。