首页 > 其他分享 >NET6使用AutoFac依赖注入(仓储模式)

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

时间:2023-07-13 19:47:36浏览次数:36  
标签:AutoFac 依赖 builder 仓储 注册 var NET6 注入

第一次使用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 下了。这里是看的老张的博客学的。

 

 如此这样就结束了!

 

标签:AutoFac,依赖,builder,仓储,注册,var,NET6,注入
From: https://www.cnblogs.com/zhang-3/p/17551917.html

相关文章

  • Vue3+.net6.0 六 条件渲染
    v-if,v-else-if,v-else控制元素是否渲染,不满足条件的时候不会有相应元素。<divv-if="type==='A'">A</div><divv-else-if="type==='B'">B</div><divv-else-if="type==='C'">C&l......
  • Vue3+.net6.0 五 类和样式绑定
    Vue3关于样式的处理跟Vue2是一样的,常用的有以下几种。1.绑定属性html部分:<div:class="{active:isActive}"></div>js部分:data(){return{isActive:true}}当isActive值为true时,div应用这个active样式,反之亦然。 2.对象方式绑定<div:class="cla......
  • Vue3+.net6.0 四 计算属性 computed
    跟Vue2一样,我们在工作中使用data中的属性时,很多时候不是直接拿来用,而是要经过一些计算,判断,筛选的过程。比如一个数组,我们可能在使用前要判断有没有元素,是否包含某个元素,然后根据不同的情况有不同的展示方式,这些如果都写在html部分,会非常不好阅读,如果多个地方要做类似的判断,则会......
  • Vue3+.net6.0 三 响应式基础,methods
    这里的示例都用选项式风格在Vue3中,数据是基于 JavaScriptProxy(代理) 实现响应式的。这个示例中输出是false,因为当你在赋值后再访问 this.someObj,此值已经是原来的 newObj 的一个响应式代理。需要注意的是newObj 并不会变成响应式。<scripttype="module">const......
  • autofac 实体层
      usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel.DataAnnotations.Schema;usingSystem.Linq;usingDapper.Lite;namespacewgh.model.Models{///<summary>///系统用户表///</summary>[Table("SysUserIn......
  • autofac 服务层
      usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingwgh.model.Models;usingDBHelper;usingIService;usingwgh.Service;namespaceService{///<summary>///系统用户服务层///<......
  • autofac 控制器
      usingService;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;usingwgh.model;namespaceWgh.studentSys_v2.Controllers{publicclassHomeController:Controller{publicIService.ISys......
  • autofac的使用
    安装autofac安装autofac.mvc   注册代码 varbuilder=newContainerBuilder();builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();//注册所有实现了IDependency接口的类型TypebaseT......
  • 01.net6集成redis
    安装redis自己使用dockercompose安装redis,yml文件如下:version:'3.9'services:redis:image:redis:6.2.5container_name:docker_redisprivileged:truevolumes:-./data:/data-./conf/redis.conf:/usr/local/etc/redis/redis.conf......
  • 使用Autofac替换Asp.net core内置的依赖注入容器
    Autofac是一个依赖注入容器。Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成。通常情况下,Asp.netcore内置的依赖注入实现已经足够用了,但Autofac确实提供了更多强大的功能,比如基于属性的注入,动态代......