Thorsten Kansy Selbstständig

.NET Core 2.x bietet große Flexibilität für die Konfiguration einer Anwendung. Sei es durch diverse Dateiformate wie JSON, XML und Co. als auch durch den Einsatz von Azure Key Vault und User Secrets.

.NET Core 2.x wartet mit einem komplett neuen Konfigurationssystem auf, das im Vergleich zum Vorgänger um einiges flexibler ist und den eigenen Wünschen angepasst werden kann. Dieser erste Teil einer Artikelserie zur Konfiguration von .NET Core 2.x stellt die Grundlagen vor, zeigt Möglichkeiten auf und demonstriert, wie das Konfigurationssystem eingesetzt wird.

Um auf die Konfiguration zugreifen zu können, muss diese wie andere Komponenten auch während des Starts einer Anwendung initialisiert werden. Dies gilt für ASP.NET-Core-2.x-Anwendungen und Konsolenanwendungen gleichermaßen. Das bedeutet ein wenig mehr Code, bietet aber dafür ein großes Maß an Flexibilität. Eine Middleware wie z. B. ASP.NET MVC übernimmt die Initialisierung selbstständig, sodass hier nur noch nach eigenem Bedarf angepasst werden muss.

Während einer klassischen .NET-Framework-Anwendung nur die Web.Config bzw. App.Config zur Verfügung stand, werden hier gleich eine ganze Reihe von Quellen, sogenannte Provider, angeboten; der Name und die Lage einer Datei können zudem frei bestimmt werden. Tabelle 1 zeigt, welche Quellen von Haus aus angeboten werden.

Konfigurationsprovider NuGet Package
JSON-Datei Microsoft.Extensions.Configuration.Json
XML-Datei Microsoft.Extensions.Configuration.Xml
INI-Datei Microsoft.Extensions.Configuration.Ini
Umgebungsvariablen Microsoft.Extensions.Configuration.EnvironmentVariables
Programmargumente Microsoft.Extensions.Configuration.CommandLine
In-Memory-Collection
Azure Key Vault Microsoft.Extensions.Configuration.AzureKeyVault
User Secrets (nur ASP.NET Core) Microsoft.Extensions.Configuration.UserSecrets
Custom

Tabelle 1: Unterstützende Konfigurationsprovider

Die Initialisierung der Konfiguration erfolgt in drei Schritten; anschließend ist die Konfiguration einsatzbereit. Als Erstes muss daraufhin eine Instanz einer Klasse als „Builder“ erzeugt werden, die die Microsoft.Extensions.Configuration.IConfigurationBuilder-Schnittstelle implementiert. Gewöhnlich ist dies die Klasse Microsoft.Extensions.Configuration.ConfigurationBuilder, denkbar ist jedoch auch eine andere Implementierung. Zweitens wird der Builder konfiguriert, indem über ein Fluent API die gewünschten Provider mit den notwendigen Angaben wie Namen, Pfade, Connection Strings etc. angegeben werden. Die Angaben erfolgen über Erweiterungsmethoden, deren Namen per Konvention mit Add beginnen, also z. B. AddCommandLine(…), AddJsonFile(…) usw. Gleiche Provider können mehrfach hinzugefügt werden, was sinnvoll ist, wenn z. B. mehrere unterschiedliche JSONDateien die Konfiguration bilden sollen. Dabei ist die Reihenfolge wichtig: Werte, die der Provider liefert, die früher hinzugefügt wurden, werden von Werten anderer Provider, die später hinzugefügt wurden, überschrieben. Zu guter Letzt lassen sich ganze Konfigurationen mittels AddConfiguration(…) zusammenfügen.

Als Drittes und Letztes wird die Build()-Methode des Builders aufgerufen. Dieser Aufruf schließt die Initialisierung ab und liefert ein Objekt vom Typ Microsoft.Extensions.Configuration.IConfigurationRoot, über das später auch auf die konfigurierten Werte zugegriffen werden kann. Dieses Objekt kann dann als Singleton, via Dependency Injection, o. Ä. dem Rest der Anwendung zur Verfügung gestellt werden, um die benötigten Werte abzurufen. Bei Bedarf kann Reload() aufgerufen werden, um die Konfiguration erneut einzulesen. Damit ist das grundlegende Vorgehen beschrieben, der Rest sind nur noch Details und ein ganzes Meer an Möglichkeiten.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Windows Developer 7.18 - ".NET ohne Grenzen"

Alle Infos zum Heft
579844581Die Konfiguration von .NET-Core-2.x-Anwendungen
X
- Gib Deinen Standort ein -
- or -