2016-06-29 4 views
10

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. Dies ist, wie ich die Konfiguration Builder initialisieren:Kann nach dem Update auf ASP.NET Core 2 keinen Konfigurationsabschnitt erhalten

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

weiß ich sicher, dass die Initialisierung ok ist, weil ich

configuration.AsEnumerable() 

im Debugger tun kann, und alle Werte in den Konfigurationsdateien in dort sehen .

aber wenn ich versuche, eine ganze Konfiguration Abschnitt wie diese

configuration.GetSection(section.Name); 

zu bekommen es funktioniert nicht. Es gibt ein Objekt zurück, egal was ich an GetSection übergebe. Jedoch ist das Wert Feld dieses Objekts immer Null, unabhängig davon, ob der Abschnitt vorhanden ist oder nicht.

Beachten Sie, dass dies früher einwandfrei funktionierte. Irgendwelche Hinweise?

Antwort

10

Es stellt sich heraus, dass man nicht mehr etwas tun kann, wie:

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

Stattdessen hat es wie folgt nun getan werden:

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

Beachten Sie, dass es notwendig ist, Microsoft enthalten. Extensions.Configuration.Binder in project.json.

+0

Nur ein Update für diejenigen, die das 2017 oder später lesen. Beginnend mit 'ASP.NET Core 2.0' ist das Hinzufügen dieses zusätzlichen NuGet nicht erforderlich. –

8

Nur eine sauberere Version der akzeptierte Antwort:

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

Source

0

ich die GetSection zuzuteilen bin mit und so habe ich eine Verlängerung Methode erstellt zu mir helfen Abschnitte die Verwendung von Generika

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