之前使用以来注入的时候,都是在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下的跨程序集加载了


												

最新文章

  1. make file教程(转)
  2. C++ 扫描文件夹下所有文件
  3. gradle 命令
  4. 由csdn开源项目评选中闹出刷票问题想到投票程序的设计
  5. Using OpenCV with gcc and CMake
  6. java属性文件读取,属性修改
  7. SPRING源码分析:IOC容器
  8. Javascript的性能瓶颈
  9. Paxos 实现日志复制同步
  10. xcode编译报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1
  11. LightOJ1012-Guilty Prince-DFS
  12. Android 学习笔记一 自定义按钮背景图
  13. ajax请求window.open()被拦截
  14. 安利一下workflowy和Dynalist
  15. Python3-递归函数
  16. centos7安装python3.6后导致防火墙功能无法正常工作的解决办法
  17. python中使用双端队列解决回文问题
  18. kafka channle的应用案例
  19. linux 下实用软件工具推荐
  20. bat语法需要注意的地方

热门文章

  1. mysql-关联查询
  2. 【转】ArcGIS中File Geodatabase与Personal Geodatabase的区别
  3. MySQL刷新事务日志级别设置
  4. px、pt、em、rem 的区别
  5. 第一个jdbc
  6. [svn] TortoiseSVN 图文操作
  7. java类加载时执行顺序
  8. SQL Server中计算表达式的和
  9. 08_Python编码与解码
  10. spring boot 中实现兼容不同的请求类型的方法。