理解 C# 設置標誌枚舉:指派標誌
配置管理是建立可擴展且可維護的C#應用程式的基本方面。 處理配置設置的最有效方法之一是使用選項模式。 在他的视频中,在10分鐘內或更短時間內在C#中選項模式,Tim Corey提供了對這種模式的簡明但深刻的解釋,以及如何有效地實施它。 在本文中,我們將通過Tim的解釋和他的視頻中的演示來探索選項模式。
介紹
Tim介紹選項模式為從配置文件中檢索信息並將其注入依賴注入(DI)的一種既強大又簡單的方法。 他強調了這種模式的幾個優勢,例如:
- 管理運行時值更改的能力。
- 內建的數據驗證支持。
- 與各種C#項目類型的兼容性,包括Blazor應用程式。
Tim強調,雖然他通常提供深入的技術培訓,但該視頻被設計為實施選項模式的快速入門指南。
設置專案
Tim首先打開以Blazor Web App(僅服務器端渲染)的形式運行的Visual Studio。 他已經進行了一些修改以加快演示速度。 關鍵設置涉及:
- 創建一個包含三對鍵值的CloudInfo部分的
appsettings.json文件。 - 使用稱為
CloudInfoOptions的普通CLR對象(POCO)模型,其映射到這些配置值。
配置文件
appsettings.json文件包含以下部分:
{
"CloudInfo": {
"Storage": "Azure Storage",
"Website": "Azure Static Web Apps",
"API": "Azure Web App"
}
}
Tim澄清說,雖然他正在使用appsettings.json,但配置值也可以來自:
appsettings.Development.jsonsecrets.json- 環境變量
將配置綁定到選項上
現在,Tim解釋了如何將配置值綁定到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組件中注入選項
Tim進入首頁組件(Index.razor)並對其進行修改,以動態顯示配置值。
他將IOptions接口注入組件中:
@inject IOptions<CloudInfoOptions> CloudInfoOptions
為了檢索實際值,他將其分配在OnInitialized內:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}
Tim解釋說,IOptions<t>提供了單例實例的配置值,這意味著它在應用程式的生命周期內保持不變。 當應用程式運行時,配置值正確地顯示在頁面上。
探索不同的選項接口
然後,Tim介紹了使用選項模式的三種不同方式:
1. 單例選項
默認情況下,IOptions<t>提供了單例實例。 Tim演示了如果應用程式運行時更新了配置文件,則除非重啟應用程式,否則更改不會反映出來。
2. 作用域選項 - 使用IOptionsSnapshot<t>
為了啟用每次請求更新,Tim修改了注入以:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
這確保了每個新的HTTP請求都能獲得新的配置值。 Tim通過修改appsettings.json並刷新頁面進行測試,顯示更新後的值立即出現。
他解釋說,IOptionsSnapshot<t>對於需要在不重新啟動應用程式的情況下反映變更的場景很有用,但不需要實時監控。
3. 監控變更 - 使用IOptionsMonitor<t>
最後,Tim介紹了IOptionsMonitor<t>,這使得實時更改偵測成為可能。 他將注入更新為:
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
不同於IOptionsMonitor<t>可以在配置值更改時觸發事件。 這在需要動態響應配置變更時特別有用。
Tim指出,IOptionsMonitor<t>由單例<強烈>推出烈>,但在底層配置文件更改時可以動態刷新值。
結論
Tim通過總結視頻結束了演講,說明了三種方法之間的主要區別:
| 接口 | 生命周期 | 更新變更時 |
|---|---|---|
IOptions<t> |
單例 | 否 |
IOptionsSnapshot<t> |
作用域 | 每次請求 |
IOptionsMonitor<t> |
單例 | 是 |
他強調,雖然選項模式簡化了配置管理,但了解這些不同的變體有助於根據项目需求选择合适的方法。
按照Tim的方法,開發者可以有效管理應用程式設置,確保平順的依賴注入,有效應對運行時配置更改。 為了更好的理解,請觀看完整的視頻,並造訪他的頻道了解更多關於C#的有見地的視頻。
