IRONSOFTWAREHOME

C# Set Flag Enumを理解する:フラグの割り当て

10分以内で学ぶC#のオプションパターン

Tim Corey

10分39秒

構成管理は、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セクションを含むファイルappsettings.jsonを作成し、3つのキーと値のペアを含めます。
  • これらの構成値にマップするCloudInfoOptionsというPlain Old CLR Object (POCO)モデルを使用します。

設定ファイル

ファイルappsettings.jsonには、次のセクションが含まれています。

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

ティムはappsettings.jsonを使用している間に、構成値が以下からも取得できることを説明します:

  • appsettings.Development.json
  • secrets.json
  • 環境変数

コンフィギュレーションをオプションにバインドする

ティムは、構成値をCloudInfoOptionsクラスにバインドして、DIに注入する方法を説明します。

Program.csにオプションを登録する

ティムはbuilder.Servicesの中に次の行を追加します:

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

これは、ファイルCloudInfoOptionsクラスにバインドします。 Tim氏は、このステップによって、依存性注入で値が利用できるようになると指摘する。

Razorコンポーネントにオプションを注入する

ティムはホームページコンポーネントIndex.razor)に移動し、構成値を動的に表示するように修正します。

彼はそのコンポーネントに**IOptionsインターフェース**を注入します:

@inject IOptions<CloudInfoOptions> CloudInfoOptions
Text

実際の値を取得するために、彼はそれらをOnInitialized内部で割り当てます:

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

ティムは、IOptions<t>が構成値のシングルトンインスタンスを提供することを説明します。つまり、アプリケーションのライフサイクル全体を通じて一定です。 アプリケーションを実行すると、設定値がページに正しく表示されます。

さまざまなオプションインターフェイスを探る

Timは次に、Optionsパターンの3つの異なる使い方を紹介します:

1.シングルトンオプション

デフォルトで、IOptions<t>シングルトンインスタンスを提供します。 Tim は、アプリの実行中に設定ファイルが更新された場合、アプリが再起動されない限り変更が反映されないことを示しています。

2. スコープオプション - IOptionsSnapshot<t>を使用

リクエストごとの更新を可能にするために、Timはインジェクションを次のように修正します:

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
Text

これにより、新しいHTTPリクエストのたびに新鮮な設定値が得られるようになります。 ティムは、appsettings.jsonを変更し、ページを更新することでテストし、更新された値がすぐに表示されることを示します。

彼は、IOptionsSnapshot<t>アプリを再起動せずに反映する必要がある変更のシナリオで有用であることを説明しますが、ライブモニタリングは必要ありません。

3. 変更の監視 - IOptionsMonitor<t>を使用

最後に、ティムはIOptionsMonitor<t>を紹介し、リアルタイムの変更検出を実現します。 彼は注入を更新します:

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
Text

リクエストごとに更新されるIOptionsMonitor<t>構成値が変更されたときにイベントをトリガーすることができます。 これは、設定の変更に動的に対応する必要がある場合に特に役立ちます。

ティムは、IOptionsMonitor<t>シングルトンでサポートされているが、基になる構成ファイルが変更されたときに動的に値を更新できると指摘します。

結論

ティムは、ビデオの最後に、3 つのアプローチの主な違いをまとめています:

インターフェースライフタイム変更に関する最新情報
IOptions<t>シングルトンいいえ
IOptionsSnapshot<t>スコープ依頼内容
IOptionsMonitor<t>シングルトンあり

彼は、Optionsパターンが構成管理を単純化する一方で、これらのさまざまなバリエーションを理解することが、プロジェクトの要件に基づいて適切なアプローチを選択するのに役立つことを強調している。

Timのアプローチに従うことで、開発者はアプリケーション設定を効率的に管理し、スムーズな依存性注入を保証し、実行時の設定変更を効果的に扱うことができます。 理解を深めるために、ビデオの完全版をご覧ください。また、チャンネルでは、C#に関する洞察に満ちたビデオを公開しています。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。