更新到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。

请注意,这在以前是非常有效的。有线索吗?

更新到ASP后,无法获取配置部分.. NET Core 2

事实证明,人们不能再做这样的事情了:

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;
    }
}