我只發現IOptions的一個用處——方便了在.NET Core應用程序中使用強類型配置。
如果沒有IOptions,使用強類型配置需要自己解決下面2個問題:
1)將配置文件(比如appsettings.json)中的配置反序列化至配置類的實例中
2)注入配置類的單例
如果有了IOptions,可以通過 Configure<TOptions>(IConfiguration config) 或 Configure<TOptions>(Action<TOptions> configureOptions) 擴展方法一次搞定上面2個問題。
下面看一個例子,我們在將阿里大於的.NET客戶端TopSdk遷移至.NET Core時,想實現通過appsettings.json對客戶端進行配置。
{ "topClient": { "serverUrl": "", "appKey": "", "appSecret": "" } }
為此定義了一個配置類TopClientOptions:
public class TopClientOptions { public string ServerUrl { get; set; } public string AppKey { get; set; } public string AppSecret { get; set; } }
然后通過在Startup的ConfigureServices()添加下面的代碼,就可以將appsettings.json中的配置綁定到TopClientOptions的實例,並完成依賴注入。
services.AddOptions();
services.Configure<TopClientOptions>(Configuration.GetSection("topClient"));
(注:需要安裝NuGet包 Microsoft.Extensions.Options.ConfigurationExtensions )
在需要讀取TopClientOptions中配置的地方只需通過構造函數注入即可:
public class DefaultTopClient : ITopClient { public DefaultTopClient(IOptions<TopClientOptions> options) { } }