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!

Tim Corey
10分39秒
構成管理は、C#でスケーラブルで保守性の高いアプリケーションを構築する上で不可欠な要素です。 コンフィギュレーション設定を扱う最も効果的な方法の1つは、Optionsパターンを使うことです。 The Options Pattern in C# in 10 Minutes or Lessというビデオで、ティム・コーリーはこのパターンの簡潔かつ洞察に満ちた説明と、効率的な実装方法を提供しています。 この記事では、ティムの説明と彼のビデオからのデモンストレーションを通して、Optionsパターンを探ります。
Tim氏はまず、Optionsパターンを、設定ファイルから情報を取得し、依存性注入(DI)に注入する強力かつシンプルな方法として紹介します。 彼は、このパターンのいくつかの利点を強調しています:
ティムは、普段は詳細な技術トレーニングを提供していますが、このビデオはオプション・パターンを実装するためのクイックスタート・ガイドとして設計されていることを強調しています。
Timは、まずVisual StudioをBlazor Web App(サーバーサイドレンダリングのみ)で開きます。 彼はすでに、デモをスピードアップするためにいくつかの修正を加えている。 主なセットアップ
appsettings.jsonを作成し、3つのキーと値のペアを含めます。CloudInfoOptionsというPlain Old CLR Object (POCO)モデルを使用します。ファイルappsettings.jsonには、次のセクションが含まれています。
{
"CloudInfo": {
"Storage": "Azure Storage",
"Website": "Azure Static Web Apps",
"API": "Azure Web App"
}
}
ティムはappsettings.jsonを使用している間に、構成値が以下からも取得できることを説明します:
appsettings.Development.jsonsecrets.jsonティムは、構成値をCloudInfoOptionsクラスにバインドして、DIに注入する方法を説明します。
ティムはbuilder.Servicesの中に次の行を追加します:
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure(Of CloudInfoOptions)(builder.Configuration.GetSection("CloudInfo"))これは、ファイルCloudInfoOptionsクラスにバインドします。 Tim氏は、このステップによって、依存性注入で値が利用できるようになると指摘する。
ティムはホームページコンポーネント(Index.razor)に移動し、構成値を動的に表示するように修正します。
彼はそのコンポーネントに**IOptionsインターフェース**を注入します:
@inject IOptions<CloudInfoOptions> CloudInfoOptions
実際の値を取得するために、彼はそれらをOnInitialized内部で割り当てます:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}Protected Overrides Sub OnInitialized()
CloudInfo = CloudInfoOptions.Value
End Subティムは、IOptions<t>が構成値のシングルトンインスタンスを提供することを説明します。つまり、アプリケーションのライフサイクル全体を通じて一定です。 アプリケーションを実行すると、設定値がページに正しく表示されます。
Timは次に、Optionsパターンの3つの異なる使い方を紹介します:
デフォルトで、IOptions<t>はシングルトンインスタンスを提供します。 Tim は、アプリの実行中に設定ファイルが更新された場合、アプリが再起動されない限り変更が反映されないことを示しています。
IOptionsSnapshot<t>を使用リクエストごとの更新を可能にするために、Timはインジェクションを次のように修正します:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
これにより、新しいHTTPリクエストのたびに新鮮な設定値が得られるようになります。 ティムは、appsettings.jsonを変更し、ページを更新することでテストし、更新された値がすぐに表示されることを示します。
彼は、IOptionsSnapshot<t>がアプリを再起動せずに反映する必要がある変更のシナリオで有用であることを説明しますが、ライブモニタリングは必要ありません。
IOptionsMonitor<t>を使用最後に、ティムはIOptionsMonitor<t>を紹介し、リアルタイムの変更検出を実現します。 彼は注入を更新します:
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
リクエストごとに更新されるIOptionsMonitor<t>は構成値が変更されたときにイベントをトリガーすることができます。 これは、設定の変更に動的に対応する必要がある場合に特に役立ちます。
ティムは、IOptionsMonitor<t>がシングルトンでサポートされているが、基になる構成ファイルが変更されたときに動的に値を更新できると指摘します。
ティムは、ビデオの最後に、3 つのアプローチの主な違いをまとめています:
| インターフェース | ライフタイム | 変更に関する最新情報 |
|---|---|---|
IOptions<t> | シングルトン | いいえ |
IOptionsSnapshot<t> | スコープ | 依頼内容 |
IOptionsMonitor<t> | シングルトン | あり |
彼は、Optionsパターンが構成管理を単純化する一方で、これらのさまざまなバリエーションを理解することが、プロジェクトの要件に基づいて適切なアプローチを選択するのに役立つことを強調している。
Timのアプローチに従うことで、開発者はアプリケーション設定を効率的に管理し、スムーズな依存性注入を保証し、実行時の設定変更を効果的に扱うことができます。 理解を深めるために、ビデオの完全版をご覧ください。また、チャンネルでは、C#に関する洞察に満ちたビデオを公開しています。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy