博客
关于我
在ASP.Net Core下,Autofac实现自动注入
阅读量:407 次
发布时间:2019-03-06

本文共 1302 字,大约阅读时间需要 4 分钟。

之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题。

于是在园子里面看到园友的自动注入,觉得很有意思,但是园友是用的MVC5,就自己再.Net Core上试了一下,于是就记录下来使用的过程

在asp.net core中,自带了一个依赖注入容器,但是功能有限,我们一般会采用第三方的容器来接管自带的容器,

var builder = new ContainerBuilder();builder.Populate(services);var baseType = typeof(AutoInject);var assembly = Assembly.GetEntryAssembly();            builder.RegisterAssemblyTypes(assembly)                .Where(t => baseType.IsAssignableFrom(t) && t != baseType)                .AsImplementedInterfaces().InstancePerLifetimeScope();this.ApplicationContainer = builder.Build();
AutoInject 是一个空的接口,只会为了标记一下哪些地方需要被autofac自动注入 然后来试一下,添加一个接口Itest.cs,实现AutoInject
public  interface ITest: AutoInject    {       string GetName();   }

添加一个实现类Test.cs

public class Test:ITest    {        public string GetName()        {            return "getName";        }    }

在控制器的构造方法里面把需要注入的接口添加进去

private readonly ITest test;        public HomeController(ITest test)        {            this.test = test;        }

运行

 

但是实际上,很多项目都会把项目分到其他的类库里面,如果使用Assembly.GetEntryAssembly();,放到其他的项目里面的可以被注入的类就无法被注入了,所以需要手动去加载其他的程序集,当然也可以用代码去扫描一下
AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("程序集名称"));

autofac的RegisterAssemblyTypes方法参数是一个数组,把需要注入的程序集加载起来,拼成一个数组,传递进去就可以实现在.Net Core下的跨程序集加载了

转载地址:http://rrtkz.baihongyu.com/

你可能感兴趣的文章
oracle 11g not in 与not exists 那个高效?
查看>>
Linux 安装Redis 5.0(以及参数调优)
查看>>
html5 Game开发系列文章之 零[开篇]
查看>>
为什么阿里巴巴建议集合初始化时,指定集合容量大小
查看>>
原创 | 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration
查看>>
为什么阿里巴巴要求谨慎使用ArrayList中的subList方法
查看>>
Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
查看>>
基于Python的Appium环境搭建合集
查看>>
Requests实践详解
查看>>
接口测试简介
查看>>
Golang Web入门(4):如何设计API
查看>>
让sublime实现js控制台(前提是安装了nodejs)
查看>>
树莓派连接二手液晶屏小记
查看>>
error: 'LOG_TAG' macro redefined
查看>>
android10Binder(一)servicemanager启动流程
查看>>
ES6基础之——new Set
查看>>
nodeJS实现识别验证码(tesseract-ocr+GraphicsMagick)
查看>>
玩玩小爬虫——试搭小架构
查看>>
AS与.net的交互——加载web上的xml
查看>>
Javascript之旅——第八站:说说instanceof踩了一个坑
查看>>