Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Zrozumieć C# Set Flag Enum: Przypisywanie flag

Tim Corey
10m 39s

Zarządzanie konfiguracją jest kluczowym aspektem budowy skalowalnych i łatwych w utrzymaniu aplikacji w C#. Jednym z najskuteczniejszych sposobów obsługi ustawień konfiguracji jest użycie wzorca opcji. W swoim filmie, The Options Pattern in C# in 10 Minutes or Less, Tim Corey dostarcza zwięzłego ale wnikliwego wyjaśnienia tego wzorca i jak go efektywnie zaimplementować. W tym artykułe zbadamy wzorzec opcji poprzez wyjaśnienia i demonstracje Tima z jego filmu.

Wprowadzenie

Tim rozpoczyna, przedstawiając wzorzec opcji jako potężny lecz prosty sposób na uzyskanie informacji z plików konfiguracyjnych i wstrzyknięcie ich do zależności (DI). Podkreśla on kilka zalet tego wzorca, takich jak:

  • Możliwość zarządzania zmianami wartości podczas działania.
  • Wsparcie dla walidacji danych.
  • Kompatybilność z różnymi typami projektów w C#, w tym aplikacjami Blazor.

Tim podkreśla, że mimo iż zazwyczaj dostarcza dogłębnego szkolenia technicznego, ten film jest zaprojektowany jako przewodnik szybkiego startu do implementacji wzorca opcji.

Konfiguracja projektu

Tim zaczyna od otwarcia Visual Studio z aplikacją Web Blazor (tylko renderowanie po stronie serwera). Dokonał już kilku modyfikacji, aby przyspieszyć demonstrację. Kluczowe ustawienie obejmuje:

  • Utworzenie pliku appsettings.json z sekcją CloudInfo zawierającą trzy pary klucz-wartość.
  • Użycie modelu POCO (Plain Old CLR Object) zwanego CloudInfoOptions, które mapuje te wartości konfiguracyjne.

Plik konfiguracyjny

Plik appsettings.json zawiera następującą sekcję:

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

Tim wyjaśnia, że chociaż używa appsettings.json, to wartości konfiguracyjne mogą również pochodzić z:

  • appsettings.Development.json
  • secrets.json
  • Zmiennych środowiskowych

Wiązanie konfiguracji z opcjami

Teraz Tim wyjaśnia, jak związać wartości konfiguracyjne z klasą CloudInfoOptions i wstrzyknąć je do DI.

Rejestrowanie opcji w Program.cs

W Program.cs, Tim dodaje następującą linię wewnątrz builder.Services:

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

To wiąże sekcję CloudInfo z appsettings.json z klasą CloudInfoOptions. Tim zauważa, że ten krok zapewnia dostępność wartości w wstrzykiwaniu zależności.

Wstrzykiwanie opcji w komponencie Razor

Tim przechodzi do komponentu strony głównej (Index.razor) i modyfikuje go, aby dynamicznie wyświetlać wartości konfiguracji.

Wstrzykuje on interfejs IOptions do komponentu.

@inject IOptions<CloudInfoOptions> CloudInfoOptions

Aby odzyskać rzeczywiste wartości, przypisuje je wewnątrz OnInitialized.

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

Tim wyjaśnia, że IOptions<t> dostarcza singletonowej instancji wartości konfiguracji, co oznacza, że pozostaje niezmienna przez cały cykl życia aplikacji. Gdy aplikacja działa, wartości konfiguracji poprawnie pojawiają się na stronie.

Badanie różnych interfejsów opcji

Tim przedstawia trzy różne sposoby użycia wzorca opcji:

1. Opcje singleton

Domyślnie IOptions<t> dostarcza singletonowej instancji. Tim pokazuje, że jeśli plik konfiguracyjny zostanie zaktualizowany, gdy aplikacja jest uruchomiona, zmiany nie są odzwierciedlone dopóki aplikacja nie zostanie zrestartowana.

2. Opcje o zakresie - Użycie IOptionsSnapshot<t>

Aby umożliwić aktualizacje na żądanie, Tim modyfikuje wstrzykiwanie do:

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions

To zapewnia, że każde nowe żądanie HTTP otrzymuje nowe wartości konfiguracji. Tim testuje to, modyfikując appsettings.json, odświeżając stronę i pokazując, że zaktualizowane wartości teraz pojawiają się natychmiast.

Wyjaśnia, że IOptionsSnapshot<t> jest użyteczne dla scenariuszy, w których zmiany muszą być odzwierciedlone bez ponownego uruchamiania aplikacji, ale nie wymagają monitorowania na żywo.

3. Monitorowanie zmian - Użycie IOptionsMonitor<t>

Na koniec Tim przedstawia IOptionsMonitor<t>, który umożliwia wykrywanie zmian w czasie rzeczywistym. Aktualizuje wstrzykiwanie do:

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions

W przeciwieństwie do IOptionsSnapshot, który aktualizuje na żądanie, IOptionsMonitor<t> może wyzwalać zdarzenia, gdy wartości konfiguracji się zmieniają. Jest to szczególnie przydatne, gdy trzeba reagować na zmiany konfiguracji dynamicznie.

Tim zauważa, że IOptionsMonitor<t> jest wspierane przez singleton, ale może odświeżać wartości dynamicznie, gdy zmienia się plik konfiguracyjny.

Wnioski

Tim kończy film podsumowując kluczowe różnice między trzema podejściami:

Interfejs Czas trwania Aktualizuje się przy zmianie
IOptions<t> Singleton Nie
IOptionsSnapshot<t> Ograniczony Na żądanie
IOptionsMonitor<t> Singleton Tak

Podkreśla on, że chociaż wzorzec opcji upraszcza zarządzanie konfiguracją, zrozumieniuiuiuiuie tych różnych wariantów pomaga wybrać odpowiednie podejście w zależności od wymagań projektu.

Podążając za podejściem Tima, programiści mogą efektywnie zarządzać ustawieniami aplikacji, zapewniać płynne wstrzykiwanie zależności i skutecznie obsługiwać zmiany konfiguracji w czasie działania. Aby lepiej zrozumieć, obejrzyj cały film i odwiedź jego kanał po więcej wnikliwych filmów o C#.

Hero Worlddot related to Zrozumieć C# Set Flag Enum: Przypisywanie flag
Hero Affiliate related to Zrozumieć C# Set Flag Enum: Przypisywanie flag

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie