NET6使用AutoFac依赖注入(仓储模式)

第一次使用autofac,然后net6最新长期支持的,就想着在net6的基础上使用autofac,我对依赖注入理解很差,一知半解的搞了好久。好在有了一点点的头绪,记录下省的以后忘记(突然发现自己以前用过的东西忘了好多……)

1.首先你要有个仓储模式的项目、这个自己搭建吧

2.在Program.cs文件中:配置程序依赖注入的容器工厂为AutoFac,覆盖默认的容器工厂。

3.添加AutoFacMoudleReg模块,注意:这个名字是你自己起的类名,我们的注册规则写在这个类里面 

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());//覆盖默认的容器工厂。
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    builder.RegisterModule(new AutoFacMoudleReg());//添加注册规则模块儿
});

4. AutoFacMoudleReg模块编写。  

  4.1 首先继承autofac的Module  
  4.2 其次重写Load方法 
     4.3  RegisterAssemblyTypes:注册程序集中所有的类型
    AsImplementedInterfaces:把服务里继承的接口也注册(应该是这个意思,这块儿不是很了解,大概是这个意思)
    PropertiesAutowired:自动属性注入(没有深究,GPT:当一个类中有公共的可写属性时,Autofac 将会自动为这些属性注入相应的依赖项)
    InstancePerDependency:生命周期,瞬时的(有没有其他的生命周期,我还没了解)
        protected override void Load(ContainerBuilder builder)
        {
            string basePath=AppDomain.CurrentDomain.BaseDirectory;//获取程序集路径

            //你要注册的服务 Dll路径
            var assemblysRepositoryPath = Path.Combine(basePath, "DogRepository");
            var assemblysServicesPath = Path.Combine(basePath, "DogService");

              
            //注入仓储
            var assemblysRepository = Assembly.LoadFrom(assemblysRepositoryPath);
            builder.RegisterAssemblyTypes(assemblysRepository)
                      .AsImplementedInterfaces()
                      .PropertiesAutowired()
                      .InstancePerDependency();

            //注入服务
            var assemblysServices = Assembly.LoadFrom(assemblysServicesPath);
            builder.RegisterAssemblyTypes(assemblysServices)
                      .AsImplementedInterfaces()
                      .InstancePerDependency()
                      .PropertiesAutowired();
        }
5.最重要的一点!!!因为仓储模式是互相调用的接口,理论上在程序(API/Controllers)层是没办法注入仓储层和服务层的服务的。除非你引用他们,但是如此这样,仓储模式的理念:解耦!就有点违背了。看老张的文章,依赖注入并非为了解耦,emmmm。其实我不是很了解,直接说结论。就是设置仓储和服务生成的相对路径,将 Repository 层和 Service 层项目生成地址改成相对路径,编译的时候就直接生成到了 api 层 bin 下了。这里是看的老张的博客学的。

 如此这样就结束了! 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值