Zum Fußzeileninhalt springen
Iron Academy Logo
Lernen Sie C#
Lernen Sie C#

Andere Kategorien

C# Set Flag Enum verstehen: Flaggen zuweisen

Tim Corey
10m 39s

Das Konfigurationsmanagement ist ein wesentlicher Aspekt bei der Erstellung skalierbarer und wartbarer Anwendungen in C#. Eine der effektivsten Methoden zur Handhabung von Konfigurationseinstellungen ist die Verwendung des Options Pattern. In seinem Video The Options Pattern in C# in 10 Minutes or Less bietet Tim Corey eine prägnante und dennoch aufschlussreiche Erklärung dieses Musters und seiner effizienten Umsetzung. In diesem Artikel werden wir das Options Pattern anhand von Tims Erklärungen und Demonstrationen aus seinem Video untersuchen.

Einführung

Tim beginnt mit einer Einführung in das Options-Pattern als leistungsfähige und dennoch einfache Möglichkeit, Informationen aus Konfigurationsdateien abzurufen und sie in die Dependency Injection (DI) einzubinden. Er hebt mehrere Vorteile dieses Musters hervor, wie z. B.:

  • Die Fähigkeit, Laufzeitwertänderungen zu verwalten.
  • Integrierte Unterstützung für die Datenvalidierung.
  • Kompatibilität mit verschiedenen C#-Projekttypen, einschließlich Blazor-Anwendungen.

Tim betont, dass er zwar in der Regel ausführliche technische Schulungen anbietet, dieses Video jedoch als Schnellstartanleitung für die Implementierung des Optionsmusters gedacht ist.

Projekt Einrichten

Tim beginnt mit dem Öffnen von Visual Studio mit einer Blazor Web App (nur serverseitiges Rendering). Er hat bereits ein paar Änderungen vorgenommen, um die Demonstration zu beschleunigen. Der Schlüsselaufbau beinhaltet:

  • Erstellen einer appsettings.json-Datei mit einem CloudInfo-Abschnitt, der drei Schlüssel-Wert-Paare enthält.
  • Verwenden eines Plain Old CLR Object (POCO)-Modells namens CloudInfoOptions, das diesen Konfigurationswerten zugeordnet ist.

Die Konfigurationsdatei

Die appsettings.json-Datei enthält den folgenden Abschnitt:

{
  "CloudInfo": {
    "Storage": "Azure Storage",
    "Website": "Azure Static Web Apps",
    "API": "Azure Web App"
  }
}

Tim erklärt, dass, während er appsettings.json verwendet, die Konfigurationswerte auch von kommen könnten:

  • appsettings.Development.json
  • secrets.json
  • Umgebungsvariablen

Binden der Konfiguration an Optionen

Nun erklärt Tim, wie man die Konfigurationswerte an die CloudInfoOptions-Klasse bindet und sie in DI injiziert.

Registrieren von Optionen in Program.cs

In Program.cs fügt Tim die folgende Zeile innerhalb builder.Services hinzu:

builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));

Dies bindet den CloudInfo-Abschnitt von appsettings.json an die CloudInfoOptions-Klasse. Tim merkt an, dass dieser Schritt sicherstellt, dass die Werte in Dependency Injection verfügbar sind.

Einfügen von Optionen in eine Razor-Komponente

Tim wechselt zur Startseitenkomponente (Index.razor) und modifiziert sie, um die Konfigurationswerte dynamisch anzuzeigen.

Er injiziert die IOptions-Schnittstelle in die Komponente:

@inject IOptions<CloudInfoOptions> CloudInfoOptions

Um die tatsächlichen Werte abzurufen, weist er sie in OnInitialized zu:

protected override void OnInitialized()
{
    CloudInfo = CloudInfoOptions.Value;
}
protected override void OnInitialized()
{
    CloudInfo = CloudInfoOptions.Value;
}

Tim erklärt, dass IOptions<t> eine Singleton-Instanz der Konfigurationswerte bereitstellt, was bedeutet, dass sie während des gesamten Anwendungslebenszyklus konstant bleibt. Wenn die Anwendung ausgeführt wird, werden die Konfigurationswerte korrekt auf der Seite angezeigt.

Unterschiedliche Optionen erforschen Schnittstellen

Anschließend stellt Tim drei verschiedene Möglichkeiten vor, das Options-Pattern zu verwenden:

1. Singleton-Optionen

Standardmäßig bietet IOptions<t> eine Singleton-Instanz. Tim demonstriert, dass, wenn die Konfigurationsdatei aktualisiert wird, während die Anwendung läuft, die Änderungen nicht übernommen werden, bis die Anwendung neu gestartet wird.

2. Gescopte Optionen - Verwendung von IOptionsSnapshot<t>

Um Aktualisierungen pro Anfrage zu ermöglichen, ändert Tim die Injektion in:

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions

Dadurch wird sichergestellt, dass jede neue HTTP-Anfrage neue Konfigurationswerte erhält. Tim testet dies, indem er appsettings.json modifiziert, die Seite aktualisiert und zeigt, dass die aktualisierten Werte jetzt sofort erscheinen.

Er erklärt, dass IOptionsSnapshot<t> nützlich ist für Szenarien, in denen Änderungen ohne Neustart der App widergespiegelt werden müssen, aber keine Live-Überwachung erfordern.

3. Änderungen überwachen - Verwendung von IOptionsMonitor<t>

Schließlich stellt Tim IOptionsMonitor<t> vor, das Echtzeitänderungserkennung ermöglicht. Er aktualisiert die Injektion auf:

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions

Im Gegensatz zu IOptionsSnapshot, das pro Anfrage aktualisiert, kann IOptionsMonitor<t> Ereignisse auslösen, wenn sich die Konfigurationswerte ändern. Dies ist besonders nützlich, wenn Sie dynamisch auf Konfigurationsänderungen reagieren müssen.

Tim merkt an, dass IOptionsMonitor<t> von einem Singletonunterstützt wird, aber die Werte dynamisch aktualisieren kann, wenn sich die zugrunde liegende Konfigurationsdatei ändert.

Abschluss

Tim fasst zum Abschluss des Videos die wichtigsten Unterschiede zwischen den drei Ansätzen zusammen:

Schnittstelle Lebenslang Aktualisierungen bei Änderungen
IOptions<t> Singleton Nein
IOptionsSnapshot<t> Geltungsbereich Pro Anfrage
IOptionsMonitor<t> Singleton Ja

Er betont, dass das Options-Pattern zwar das Konfigurationsmanagement vereinfacht, das Verständnis dieser verschiedenen Varianten jedoch bei der Auswahl des richtigen Ansatzes auf der Grundlage der Projektanforderungen hilft.

Durch die Befolgung von Tims Ansatz können Entwickler Effiziente Anwendungseinstellungen verwalten, eine reibungslose Injektion von Abhängigkeiten sicherstellen und Änderungen der Laufzeitkonfiguration effektiv handhaben. Zum besseren Verständnis sehen Sie sich bitte das komplette Video an und besuchen Sie seinen Kanal für weitere aufschlussreiche Videos zu C#.

Hero Worlddot related to C# Set Flag Enum verstehen: Flaggen zuweisen
Hero Affiliate related to C# Set Flag Enum verstehen: Flaggen zuweisen

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an