it-swarm.com.de

Konfig-Abschnitt kann nach einem Update auf ASP.NET Core 2 nicht abgerufen werden

Ich habe mein Projekt von 1.0.0-rc1-final auf 1.0.0-rc2-final aktualisiert, das jetzt ASP.NET Core 2 heißt. So initialisiere ich den Konfigurations-Builder:

var builder = new ConfigurationBuilder().SetBasePath(Environment.GetEnvironmentVariable("ASPNETCORE_CONTENTROOT")).AddJsonFile(file).AddEnvironmentVariables();
IConfiguration configuration = builder.Build();

Ich weiß sicher, dass die Initialisierung in Ordnung ist, weil ich das machen kann 

configuration.AsEnumerable()

im Debugger und sehen Sie alle Werte in den Konfigurationsdateien dort.

Allerdings, wenn ich versuche, einen ganzen Konfigurationsabschnitt wie diesen zu erhalten

configuration.GetSection(section.Name);

es funktioniert nicht Es gibt ein Objekt zurück, unabhängig davon, was ich an GetSection übergeben habe. Das Feld Value dieses Objekts ist jedoch immer null, unabhängig davon, ob der Abschnitt vorhanden ist oder nicht.

Beachten Sie, dass dies zuvor einwandfrei funktioniert hat. Gibt es Hinweise?

12
Alex G.

Es stellt sich heraus, dass man so etwas nicht mehr machen kann:

var allSettingsInSection = configuration.Get(typeof(StronglyTypedConfigSection), sectionName);

Stattdessen muss es jetzt so gemacht werden:

IConfigurationSection sectionData = configuration.GetSection(sectionName);
var section = new StronglyTypedConfigSection();
sectionData.Bind(section);

Beachten Sie, dass Sie Microsoft.Extensions.Configuration.Binder in project.json angeben müssen.

14
Alex G.

Nur eine sauberere Version der akzeptierten Antwort:

public void ConfigureServices(IServiceCollection services)  
{
    services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
}

Quelle

8
user1265146

In dot net core 2.1 können Sie Folgendes tun:

var MyConfigClass = Configuration.GetSection("MyConfigClass").Get<MyConfigClass>();
1
BartKrul

Ich verwende die GetSection-Zuteilung und habe daher eine Erweiterungsmethode erstellt, um mir zu helfen, Abschnitte mit Generika zu erhalten

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;
    }
}
0
Menelaos Vergis