更新到ASP后,无法获取配置部分.. NET Core 2
本文关键字:配置部 NET Core 获取 ASP 更新 | 更新日期: 2023-09-27 17:53:18
我将我的项目从1.0.0-rc1-final更新为1.0.0-rc2-final,即所谓的ASP。NET Core 2。我是这样初始化配置构建器的:
var builder = new ConfigurationBuilder().SetBasePath(Environment.GetEnvironmentVariable("ASPNETCORE_CONTENTROOT")).AddJsonFile(file).AddEnvironmentVariables();
IConfiguration configuration = builder.Build();
我可以确定初始化是正确的因为我可以执行
configuration.AsEnumerable()
,查看配置文件中的所有值。
但是,如果我想获得像这样的整个配置部分
configuration.GetSection(section.Name);
它不起作用。不管我向GetSection传递什么,它都会返回一个对象。但是,无论该section是否存在,该对象的Value字段总是null。
请注意,这在以前是非常有效的。有线索吗?
事实证明,人们不能再做这样的事情了:
var allSettingsInSection = configuration.Get(typeof(StronglyTypedConfigSection), sectionName);
现在必须这样做:
IConfigurationSection sectionData = configuration.GetSection(sectionName);
var section = new StronglyTypedConfigSection();
sectionData.Bind(section);
注意,必须包含Microsoft.Extensions.Configuration。在> project.json 。
只是一个被接受的答案的简洁版本:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
}
源在dot net core 2.1中,你可以这样做:
我在这里使用nameof作为字符串来获取类的名称,而不是使用实际的字符串。这是基于Uwe klein的回复,它更干净。
var myConfigClass = Configuration.GetSection(nameof(MyConfigClass)).Get<MyConfigClass>();
轻松注入强类型配置,如下所示:
services.Configure<MyConfigClass>(myConfigClass);
我正在使用GetSection分配,因此我创建了一个扩展方法来帮助我使用泛型获得节
public static class ConfigurationExtensions
{
public static T GetConfig<T>(this IConfiguration config) where T : new()
{
var settings = new T();
config.Bind(settings);
return settings;
}
public static T GetConfig<T>(this IConfiguration config, string section) where T : new()
{
var settings = new T();
config.GetSection(section).Bind(settings);
return settings;
}
}