最近在修改/整理Aquarius.Weixin项目,今天修改了一下之前写的添加DI的扩展方法,遇到了不知道怎么手动解析出IOptions的问题,在此记录一下(还不是因为自己没学好 (′д` )…彡…彡)
IServiceCollection
扩展类一般有如下3个方法:

其中,后两个方法分别接收
Action<AquariusWeixinOptions>
和 IConfiguration
,作为配置信息传入,在方法中调用 services.Configure
方法之后再调用无参的 AddAquariusWeixin
,代码如下:
public static IAquariusWeixinBuilder AddAquariusWeixin(this IServiceCollection services, Action<AquariusWeixinOptions> setupAction)
{
services.Configure(setupAction);
return AddAquariusWeixin(services);
}
所以,在无参的 AddAquariusWeixin
方法中需要手动去解析添加的配置信息来通过配置达到不同的注入。
在经过一番google之后在stackoverflow找到了一个可以取到 IServiceProvider
类型实例的方法。
具体写法如下:
var provider = services.BuildServiceProvider();//get an instance of IServiceProvider
var options = provider.GetRequiredService<IOptions<AquariusWeixinOptions>>().Value;//resolve an instance of AquariusWeixinOptions
其中 services
是 IServiceCollection
类型的实例。
网友评论