如何检查配置部分是否存在?
How to check if config section exists?
我正在尝试为我的 dotnet 核心项目实施一个简单的配置服务。
如果添加的任何配置文件中都不存在请求的配置部分,我想return null
。
我当前检索配置部分的代码:
private static IConfigurationRoot _configuration { get; set; }
private static IConfigurationBuilder _builder;
public JsonConfigService()
{
_builder = new ConfigurationBuilder();
}
public T GetConfigModel<T>(string name) where T : new()
{
if (string.IsNullOrWhiteSpace(name))
return default(T);
var section = _configuration.GetSection(name);
if (section == null || string.IsNullOrWhiteSpace(section.Value))
return default(T);
var value = new T();
section.Bind(value);
return value;
}
public void RegisterSource(string source)
{
_builder.AddJsonFile(source);
_configuration = _builder.Build();
}
问题是:
- 无论请求的配置部分在配置中是否可用,部分永远不会为空。
section.Value
始终为空(仅针对复杂类型进行测试)
如何在绑定前确定配置部分 "NotHere" 是否确实在 json 文件中?
如果配置中不存在该部分,则使用 GetValue
方法代替 GetSection
returns null
。
用法:
public T GetConfigModel<T>(string name) where T : new()
{
if (string.IsNullOrWhiteSpace(name))
return default(T);
try
{
return _configuration.GetValue<T>(name);
}
catch (Exception ex)
{
throw ex;
}
}
我正在尝试为我的 dotnet 核心项目实施一个简单的配置服务。
如果添加的任何配置文件中都不存在请求的配置部分,我想return null
。
我当前检索配置部分的代码:
private static IConfigurationRoot _configuration { get; set; }
private static IConfigurationBuilder _builder;
public JsonConfigService()
{
_builder = new ConfigurationBuilder();
}
public T GetConfigModel<T>(string name) where T : new()
{
if (string.IsNullOrWhiteSpace(name))
return default(T);
var section = _configuration.GetSection(name);
if (section == null || string.IsNullOrWhiteSpace(section.Value))
return default(T);
var value = new T();
section.Bind(value);
return value;
}
public void RegisterSource(string source)
{
_builder.AddJsonFile(source);
_configuration = _builder.Build();
}
问题是:
- 无论请求的配置部分在配置中是否可用,部分永远不会为空。
section.Value
始终为空(仅针对复杂类型进行测试)
如何在绑定前确定配置部分 "NotHere" 是否确实在 json 文件中?
如果配置中不存在该部分,则使用 GetValue
方法代替 GetSection
returns null
。
用法:
public T GetConfigModel<T>(string name) where T : new()
{
if (string.IsNullOrWhiteSpace(name))
return default(T);
try
{
return _configuration.GetValue<T>(name);
}
catch (Exception ex)
{
throw ex;
}
}