在 .NET Core(現在統一稱為 .NET)中,IOptions
是一種用來讀取設定檔的設計模式。它提供強型別的方式,讓你能從 appsettings.json
或其他來源讀取資料,並注入到你的服務中。
✅ 為什麼要用 IOptions
?
- ✅ 強型別支援:比
Configuration["Key"]
更安全、更容易維護 - ✅ 支援依賴注入(DI):讓設定更容易測試與使用
- ✅ 支援監控與更新(使用
IOptionsSnapshot
和IOptionsMonitor
)
🛠 基本用法
1. appsettings.json
{
"MySettings": {
"SiteName": "My Cool Site",
"EnableFeatureX": true
}
}
2. 建立設定類別
public class MySettings
{
public string SiteName { get; set; }
public bool EnableFeatureX { get; set; }
}
3. 在 Program.cs 或 Startup.cs 中綁定設定
builder.Services.Configure<MySettings>(
builder.Configuration.GetSection("MySettings"));
4. 在服務中使用設定
public class MyService
{
private readonly MySettings _settings;
public MyService(IOptions<MySettings> options)
{
_settings = options.Value;
}
public void Show()
{
Console.WriteLine(_settings.SiteName);
}
}
🔄 IOptions
相關介面比較
介面類型 | 功能說明 |
---|---|
IOptions<T> |
一般用途,讀取設定值,啟動後不會變動 |
IOptionsSnapshot<T> |
每次 DI 解析時會重新載入(適合 Scope 生命周期) |
IOptionsMonitor<T> |
支援即時監聽設定變更(適合 Singleton) |
❓ 綁定失敗會怎樣?
- 若 JSON 少了某個欄位,該屬性會使用預設值(如 string 為 null、bool 為 false)
- 不會拋例外
- 若 JSON 值型別錯誤(如把布林值寫成字串),則會拋例外
🛡️ 加入設定驗證(推薦)
1. 使用資料註解(Data Annotations)
using System.ComponentModel.DataAnnotations;
public class MySettings
{
[Required]
public string SiteName { get; set; }
public bool EnableFeatureX { get; set; }
}
2. 註冊時啟用驗證
builder.Services
.AddOptions<MySettings>()
.Bind(builder.Configuration.GetSection("MySettings"))
.ValidateDataAnnotations()
.ValidateOnStart(); // 啟動時驗證,錯誤會拋例外
這樣可以防止設定漏填,讓錯誤在啟動階段就被發現,而不是等到執行時才出問題。
📌 小結
-
IOptions<T>
是強型別、安全、支援 DI 的設定綁定方式 - 預設為寬鬆綁定,欄位缺漏不會報錯
- 若需強制驗證設定完整性,建議搭配
ValidateDataAnnotations()
和ValidateOnStart()
Top comments (0)