ASP.NET Core-Konfigurationsabschnitt in Startup

Ich migriere ein ASP.NET 5 RC1-Projekt zu ASP.NET Core und bin auf ein interessantes Problem gestoßen, das ich noch nicht gesehen oder für das ich keine Lösung gefunden habe.

Um die Konfigurationseinstellungen in Startup zu verwenden, habe ich die Konfiguration zuvor folgendermaßen abgerufen:

// Works fine for DI both in ASP.NET 5 RC1 and ASP.NET Core
services.Configure<SomeConfigurationClass>(Configuration.GetSection("SomeConfigurationSection"));

// How I previous retrieved the configuration for use in startup. 
// No longer available in ASP.NET Core
var someConfigurationToUseLater = Configuration.Get<SomeConfigurationClass>("SomeConfigurationSection");

Nach der Aktualisierung auf ASP.NET Core 1.0 scheint Configuration.Get <T> () nicht mehr verfügbar zu sein.

Ich habe versucht, den Code für die Verwendung von Configuration.GetValue <T> () zu aktualisieren. Dies scheint jedoch nicht mit Objekten zu funktionieren und funktioniert nur, wenn ein Pfad zu einem Wert angegeben wird. Dies hat mich mit einer Problemumgehung für @ verlassdie meiste meiner Konfigurationsklassen wie so

var someConfigurationName = "someConfiguration";    
var someConfigurationClass = new SomeConfigurationClass()
{
    Value1 = Configuration.GetValue<string>($"{someConfigurationName}:value1"),
    Foo = Configuration.GetValue<string>($"{someConfigurationName}:foo"),
    Bar = Configuration.GetValue<string>($"{someConfigurationName}:bar")
};

Dies ist jedoch ein Problem, wenn die Konfigurationsklasse ein Array von Objekten enthält. In meinem Fall ein Array von Client-Objekten

public class ClientConfiguration
{
    public Client[] Clients { get; set; }
}

Mit der folgenden Konfiguration

"configuredClients": {
  "clients": [
    {
      "clientName": "Client1",
      "clientId": "Client1"
    },
    {
      "clientName": "Client2",
      "clientId": "Client2"
    }
  ]
}

Wo dies bisher problemlos an die Eigenschaft Clients meiner Konfigurationsklasse binden würde, kann ich in ASP.NET Core 1.0 keine Möglichkeit mehr finden.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage