Configuration.GetValue<T> 返回 null 但 Bind 有效
Configuration.GetValue<T> returning null but Bind works
我在从 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>
?
提前致谢。
GetValue
仅适用于简单值,例如 string
、int
等 - 它不会遍历嵌套配置的层次结构。
参考:Configuration in ASP.NET Core: GetValue
ConfigurationBinder.GetValue<T>
extracts a value from configuration with a specified key and converts it to the specified type. An overload permits you to provide a default value if the key isn't found.
不要使用 Bind
,而是使用以下内容来避免创建您自己的 IntegrationsConfigurationDto
实例:
var config = _configuration.GetSection("Integrations:System01")
.Get<IntegrationsConfigurationDto>();
ConfigurationBinder.Get<T>
binds and returns the specified type. Get<T>
is more convenient than using Bind
.
我在从 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>
?
提前致谢。
GetValue
仅适用于简单值,例如 string
、int
等 - 它不会遍历嵌套配置的层次结构。
参考:Configuration in ASP.NET Core: GetValue
ConfigurationBinder.GetValue<T>
extracts a value from configuration with a specified key and converts it to the specified type. An overload permits you to provide a default value if the key isn't found.
不要使用 Bind
,而是使用以下内容来避免创建您自己的 IntegrationsConfigurationDto
实例:
var config = _configuration.GetSection("Integrations:System01")
.Get<IntegrationsConfigurationDto>();
ConfigurationBinder.Get<T>
binds and returns the specified type.Get<T>
is more convenient than usingBind
.