• 在ASP.Net Core下,Autofac实现自动注入


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





  • 相关阅读:
    So easy Webservice 2.WebService介绍
    So easy Webservice 1.Socket建设web服务
    eclipse 实用快捷键
    Memory Layout of C Programs
    C程序员必须知道的内存知识【英】
    闭包,懂不懂由你,反正我是懂了
    什么是闭包,我的理解
    浅析Java中的访问权限控制
    Java访问控制
    Java修饰符public,private,protected及默认的区别
  • 原文地址:https://www.cnblogs.com/boxrice/p/8301666.html
Copyright © 2020-2023  润新知