.NET Core 中 IOptions 有什么用
我只发现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) { } }