首页前端开发HTML在ASP.Net Core下,Autofac实现自动注入

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

时间2023-07-05 12:28:02发布访客分类HTML浏览436
导读:之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题。于是在园子里面看到园友的自动注入,觉得很有意思,...

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





声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

XML开发框架前端开发.NET数据格式容器

若转载请注明出处: 在ASP.Net Core下,Autofac实现自动注入
本文地址: https://pptw.com/jishu/290248.html
Asp.Net Core 2.1+的视图缓存(响应缓存) go语言面向编程思想

游客 回复需填写必要信息