为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 如何在.Netcore控制台应用中使用依赖注入(3)

如何在.Netcore控制台应用中使用依赖注入(3)

2019.01.14 21:50 1117浏览

已经发布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 如下:

InjectorConfigureServices
InjectorConfigureServices()
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, AutofacInjectorAdapterConfigureServices 对应关系如下:

AutofacInjectorAutofacInjectorAdapterConfigureServices
AutofacInjector<T>AutofacInjectorAdapter<T>ConfigureServices<T>(T t)
......



作者:Weidaicheng
链接:https://www.jianshu.com/p/63322650c9da


点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
224
获赞与收藏
990

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

51篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

152篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消