IConfiguration.GetSection() 作为属性 returns 空
IConfiguration.GetSection() as Properties returns null
我正在尝试在我的应用程序中检索配置。
我已将 IConfiguration 传递给需要提取一些设置的服务 class。
class 看起来有点像这样:
private IConfiguration _configuration;
public Config(IConfiguration configuration)
{
_configuration = configuration;
}
public POCO GetSettingsConfiguration()
{
var section = _configuration.GetSection("settings") as POCO;
return section;
}
在调试中,我可以看到 _configuration 确实包含设置
但是我的 "section" 只是返回为 null。
我知道我可以尝试将 Poco 设置为在启动时创建,然后作为依赖项注入,但由于设置原因,我宁愿单独进行 classes 来自注入的 IConfiguration,如果可能的话。
我的 appsettings.json 有这些值:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"settings": {
"Username": "user",
"Password": "password",
"Domain": "example.com",
"URL": "http://service.example.com"
}
}
我的 poco class 看起来像这样:
public class POCO
{
public string URL { get; set; }
public string Username { get; set; }
public SecureString Password { get; set; }
public string Domain { get; set; }
}
您需要使用:
var section = _configuration.GetSection("settings").Get<POCO>();
从 GetSection
返回的只是一个字符串字典。你不能把它投射到你的 POCO class.
IConfiguration
和 IConfigurationSection
有一个扩展方法 Bind 用于此目的:
var poco = new POCO();
_configuration.GetSection("settings").Bind(poco);
或者只是 Get
var poco = _configuration.GetSection("settings").Get(typeof(POCO));
或通用Get
var poco = _configuration.GetSection("settings").Get<POCO>();
我正在尝试在我的应用程序中检索配置。
我已将 IConfiguration 传递给需要提取一些设置的服务 class。
class 看起来有点像这样:
private IConfiguration _configuration;
public Config(IConfiguration configuration)
{
_configuration = configuration;
}
public POCO GetSettingsConfiguration()
{
var section = _configuration.GetSection("settings") as POCO;
return section;
}
在调试中,我可以看到 _configuration 确实包含设置 但是我的 "section" 只是返回为 null。
我知道我可以尝试将 Poco 设置为在启动时创建,然后作为依赖项注入,但由于设置原因,我宁愿单独进行 classes 来自注入的 IConfiguration,如果可能的话。
我的 appsettings.json 有这些值:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"settings": {
"Username": "user",
"Password": "password",
"Domain": "example.com",
"URL": "http://service.example.com"
}
}
我的 poco class 看起来像这样:
public class POCO
{
public string URL { get; set; }
public string Username { get; set; }
public SecureString Password { get; set; }
public string Domain { get; set; }
}
您需要使用:
var section = _configuration.GetSection("settings").Get<POCO>();
从 GetSection
返回的只是一个字符串字典。你不能把它投射到你的 POCO class.
IConfiguration
和 IConfigurationSection
有一个扩展方法 Bind 用于此目的:
var poco = new POCO();
_configuration.GetSection("settings").Bind(poco);
或者只是 Get
var poco = _configuration.GetSection("settings").Get(typeof(POCO));
或通用Get
var poco = _configuration.GetSection("settings").Get<POCO>();