C# Set Flag Enumを理解する:フラグの割り当て
構成管理は、C#でスケーラブルで保守性の高いアプリケーションを構築する上で不可欠な要素です。 コンフィギュレーション設定を扱う最も効果的な方法の1つは、Optionsパターンを使うことです。 The Options Pattern in C# in 10 Minutes or Lessというビデオで、ティム・コーリーはこのパターンの簡潔かつ洞察に満ちた説明と、効率的な実装方法を提供しています。 この記事では、ティムの説明と彼のビデオからのデモンストレーションを通して、Optionsパターンを探ります。
はじめに
Tim氏はまず、Optionsパターンを、設定ファイルから情報を取得し、依存性注入(DI)に注入する強力かつシンプルな方法として紹介します。 彼は、このパターンのいくつかの利点を強調しています:
- 実行時の値の変更を管理できること。
- 組み込みのデータ検証サポート。
- Blazor アプリケーションを含む様々な C# プロジェクトタイプとの互換性。
ティムは、普段は詳細な技術トレーニングを提供していますが、このビデオはオプション・パターンを実装するためのクイックスタート・ガイドとして設計されていることを強調しています。
プロジェクトの設定
Timは、まずVisual StudioをBlazor Web App(サーバーサイドレンダリングのみ)で開きます。 彼はすでに、デモをスピードアップするためにいくつかの修正を加えている。 主なセットアップ
- CloudInfoセクションに3つのキーと値のペアを含む
appsettings.jsonファイルを作成します。 - Plain Old CLR Object (POCO)モデルである
CloudInfoOptionsを使用して、これらの設定値にマッピングします。
設定ファイル
appsettings.jsonファイルには次のセクションが含まれています。
{
"CloudInfo": {
"Storage": "Azure Storage",
"Website": "Azure Static Web Apps",
"API": "Azure Web App"
}
}ティムは、appsettings.jsonを使用している間に、設定値が以下からも取得できることを説明します。
appsettings.Development.jsonsecrets.json- 環境変数
コンフィギュレーションをオプションにバインドする
今、ティムは、設定値をCloudInfoOptionsクラスにバインドし、DIに注入する方法を説明します。
Program.csにオプションを登録する
builder.Services内に次の行を追加します。
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));これにより、CloudInfoOptionsクラスにバインドされます。 Tim氏は、このステップによって、依存性注入で値が利用できるようになると指摘する。
Razorコンポーネントにオプションを注入する
ティムはホームページコンポーネント(Index.razor)に移動し、構成値を動的に表示するように修正します。
彼はIOptionsインターフェースをコンポーネントに注入します。
@inject IOptions<CloudInfoOptions> CloudInfoOptions実際の値を取得するために、OnInitialized内にそれらを割り当てます。
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}ティムは、IOptions<t>が構成値のシングルトンインスタンスを提供し、アプリケーションのライフサイクル全体にわたって一定であることを説明します。 アプリケーションを実行すると、設定値がページに正しく表示されます。
さまざまなオプションインターフェイスを探る
Timは次に、Optionsパターンの3つの異なる使い方を紹介します:
1.シングルトンオプション
デフォルトでは、IOptions<t>がシングルトンインスタンスを提供します。 Tim は、アプリの実行中に設定ファイルが更新された場合、アプリが再起動されない限り変更が反映されないことを示しています。
2. スコープオプション - IOptionsSnapshot<t>を使用する
リクエストごとの更新を可能にするために、Timはインジェクションを次のように修正します:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptionsこれにより、新しいHTTPリクエストのたびに新鮮な設定値が得られるようになります。 ティムはこれをテストするためにappsettings.jsonを修正し、ページを更新し、更新された値が即座に表示されることを示します。
彼は、IOptionsSnapshot<t>がアプリの再起動なしで変更を反映する必要があるが、ライブ監視が不要なシナリオに役立つことを説明します。
3. 変更の監視 - IOptionsMonitor<t>を使用する
最後に、ティムはIOptionsMonitor<t>を紹介し、リアルタイムの変更検出を有効にします。 彼は注入を更新します:
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptionsIOptionsMonitor<t>は、設定値が変更されたときにイベントをトリガーできます。 これは、設定の変更に動的に対応する必要がある場合に特に役立ちます。
ティムは、IOptionsMonitor<t>がシングルトンによってサポートされているが、基になる設定ファイルが変更されたときに値を動的に更新できることを指摘します。
結論
ティムは、ビデオの最後に、3 つのアプローチの主な違いをまとめています:
| インターフェース | ライフタイム | 変更に関する最新情報 |
|---|---|---|
IOptions<t> | シングルトン | いいえ |
IOptionsSnapshot<t> | スコープ | 依頼内容 |
IOptionsMonitor<t> | シングルトン | あり |
彼は、Optionsパターンが構成管理を単純化する一方で、これらのさまざまなバリエーションを理解することが、プロジェクトの要件に基づいて適切なアプローチを選択するのに役立つことを強調している。
Timのアプローチに従うことで、開発者はアプリケーション設定を効率的に管理し、スムーズな依存性注入を保証し、実行時の設定変更を効果的に扱うことができます。 理解を深めるために、ビデオの完全版をご覧ください。また、チャンネルでは、C#に関する洞察に満ちたビデオを公開しています。

