C# 配置.GetValue<;T>;返回null但绑定有效
从我的C# 配置.GetValue<;T>;返回null但绑定有效,c#,asp.net-core,.net-core,appsettings,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:
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");
我在config
变量中正确获取了值
为什么会这样?在这种情况下如何使用GetValue
提前感谢。
GetValue
仅适用于简单值,如string
、int
等-它不遍历嵌套配置的层次结构
参考:
ConfigurationBinder.GetValue
使用指定键从配置中提取一个值,并将其转换为指定类型。重载允许您在找不到密钥时提供默认值
不要使用Bind
,而是使用以下命令来避免创建自己的IntegrationsConfigurationDto
:
var config = _configuration.GetSection("Integrations:System01")
.Get<IntegrationsConfigurationDto>();
var config=\u configuration.GetSection(“集成:System01”)
.Get();
参考:
ConfigurationBinder.Get
绑定并返回指定的类型Get
比使用Bind
更方便
你为什么不能用第二种方法?我可以。我只是想知道为什么第一个不起作用,以及我是否可以为它做些什么。我认为GetValue用于单个值,而不是一个部分。
var config = _configuration.GetSection("Integrations:System01")
.Get<IntegrationsConfigurationDto>();