Konfiguration von .NET Core-Anwendungen

Konfiguration von .NET Core-Anwendungen


In diesem Artikel soll beschrieben werden, wie .NET Core Anwendungen konfiguriert werden können. Die Einstellungen können aus JSON-Dateien, Umgebungsvariablen,... bezogen werden. Diese Konfigurationsquellen werden vorallem bei Microservices oder Serveranwendungen genutzt. Das nachfolgende Beispiel wird als Konsolenanwendung umgesetzt.

Optionspattern

Um verschiedene Einstellungen zu ordnen wird das Optionspattern genutzt. Dadurch erhalten z.B. verschiedene Anwendungsbereiche nur die für sie relevanten Optionen. Im Folgenden ist eine Beispiel Optionsklasse gezeigt. Das Feld Title bestimmt den Konsolentitel der Anwendung. Mit OptionName wird der Name der Sektion festgelegt.

public class ConsoleOptions
{
	public static string OptionName = "Console";
	public string Title { get; set; }
}

Abhängigkeiten

Zunächst müssen folgende NuGet-Pakete, z.B. mit dem Package-Manager eingebunden werden:

PM> Install-Package Microsoft.Extensions.Configuration
PM> Install-Package Microsoft.Extensions.Configuration.Binder
PM> Install-Package Microsoft.Extensions.Configuration.Json

Mit dem Binder-Package kann die Konfiguration als Optionsklasse zur Verfügung gestellt werden. Das JSON-Paket ist ein Konfigurations-Provider, der die Konfiguration aus dem JSON-Format ausliest. Es stehen weitere Provider für INI-Dateien, Kommandozeilenparameter,... zur Verfügung.

Erstellen der Konfiguration

Mit dem ConfigurationBuilder kann die Konfiguration erstellt werden. Die Methode Build gibt anschließend die Konfiguration vom Typ IConfiguration zurück. GetSection gibt die IConfigurationSection mit dem angegebenen Key (hier: Console) zurück. Die generische Get-Methode bindet die Konfiguration an ein ConsoleOptions-Objekt. Das erzeugte ConsoleOptions-Objekt kann dann z.B. mittels Dependency Injection an eine Klasse, welche die Optionen benötigt, weitergegeben werden. Um weitere Einstellungen zu verwalten können neue Optionsklassen definiert und aus der jeweiligen Sektion ausgelesen werden.

IConfiguration config = new ConfigurationBuilder()
	.AddJsonFile("test.json")
	.Build();
ConsoleOptions consoleOptions = config.GetSection(ConsoleOptions.OptionName).Get<ConsoleOptions>();

// Setze Konsolentitel:
Console.Title = consoleOptions.Title;

Inhalt der test.json:

{
    "Console": {
        "Title": "OBG IT Solutions GmbH"
    }
}