已经发布1.3.3-preview有好几天的时间了,一直没时间写这一篇文章(主要是因为自己懒)。在新版本中支持使用带参数注入。
应用场景
在之前的版本中如果想在继承自 Injector
抽象类的 Inject
方法中使用 Main
方法传入的值,只有通过静态变量的方式。这种方式不好维护,而且存在一定的危险性,如果可以在注入的时候传入参数,将会简单很多。
使用方法
1、实现一个类继承自 Injector<T,...>
泛型类,并重载实现 Inject(T,...)
方法。
public class ExampleInjector : Injector<string> { public override void Inject(string t) { services.AddTransient<Interface, Implication>(); } }
这样,就可以在实施注入的时候使用传入的参数。
2、在 Main
方法的第一行添加如下代码
var provider = Startup.ConfigureServices("value");// 如果你不需要一个 providerStartup.ConfigureServices("value");
所有 Injector
抽象类及对应的 ConfigureServices
如下:
Injector | ConfigureServices |
---|---|
Injector | ConfigureServices() |
Injector<T> | ConfigureServices<T>(T t) |
Injector<T1, T2> | ConfigureServices<T1, T2>(T1 t1, T2 t2) |
Injector<T1, T2, T3> | ConfigureServices<T1, T2, T3>(T1 t1, T2 t2, T3 t3) |
Injector<T1, T2, T3, T4> | ConfigureServices<T1, T2, T3, T4>(T1 t1, T2 t2, T3 t3, T4 t4) |
Injector<T1, T2, T3, T4, T5> | ConfigureServices<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) |
对于使用 Autofac ,方法略有不同
1、在项目中添加Autofac.Extensions.DependencyInjection包。
2、实现一个类继承自 AutofacInjector<T,...>
泛型类,并重载实现 Inject(T,...)
方法。
public class ExampleInjector : AutofacInjector<string> { public override IServiceProvider Inject(string t) { // Create the container builder. var builder = new ContainerBuilder(); // register your service // ... var container = builder.Build(); } }
实现一个类继承自 AutofacInjectorAdapter<T,...>
,然后保持类体是空的。
public class ExampleAdapter : AutofacInjectorAdapter<string> { // 没有任何实现}
3、然后在 Main
方法中添加相同的代码。AutofacInjector
, AutofacInjectorAdapter
和 ConfigureServices
对应关系如下:
AutofacInjector | AutofacInjectorAdapter | ConfigureServices |
---|---|---|
AutofacInjector<T> | AutofacInjectorAdapter<T> | ConfigureServices<T>(T t) |
... | ... |
作者:Weidaicheng
链接:https://www.jianshu.com/p/63322650c9da
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦