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

net6,使用,autofac,依赖,注入,仓储,模式 · 浏览次数 : 52

小编点评

**1. 创建仓储模式的项目** * 创建一个命名为 `MyProject` 的新项目。 * 在 `Program.cs` 文件中添加以下代码: ```csharp // 配置程序依赖注入的容器工厂 builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); // 注册注册规则模块 builder.Host.ConfigureContainer(builder => { builder.RegisterModule(new AutoFacMoudleReg()); }); ``` **2. 在 `Program.cs` 文件中配置程序依赖注入的容器工厂** * 在 `App.Config.cs` 中添加以下代码: ```csharp // 配置 AutoFac 模块 services.AddAutoFac(); ``` **3. 创建 `AutoFacMoudleReg` 模块** * 创建一个命名为 `AutoFacMoudleReg` 的新类。 * 在 `AutoFacMoudleReg` 中编写以下代码: ```csharp using Autofac.Core; public class AutoFacMoudleReg : Module { protected override void Load(ContainerBuilder builder) { // 注册程序集中的所有类型 builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly().Assembly.GetTypes()); // 注册服务里的接口 builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly().Assembly.GetTypes().Where(t => t.IsInterface)); // 设置属性注入 builder.PropertiesAutowired(); // 设置生命周期,瞬时的 builder.InstancePerDependency(); } } ``` **4. 编写 `RegisterAssemblyTypes` 方法** * 在 `AutoFacMoudleReg` 中编写 `RegisterAssemblyTypes` 方法,其中包含以下代码: ```csharp public void RegisterAssemblyTypes(string assemblyPath) { // 从路径中获取 Assembly 对象 var assembly = Assembly.LoadFrom(assemblyPath); // 注册 Assembly 类型 builder.RegisterAssemblyTypes(assembly.GetTypes()); } ``` **5. 配置程序依赖注入** * 在 `Startup.cs` 文件中添加以下代码: ```csharp // 使用 AutoFac 注册服务 services.AddAutoFac(); // 注册仓储层 services.Add() .As(); // 注册服务层 services.Add() .As(); ```

正文

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

 

 如此这样就结束了!

 

与NET6使用AutoFac依赖注入(仓储模式)相似的内容:

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

第一次使用autofac,然后net6最新长期支持的,就想着在net6的基础上使用autofac,我对依赖注入理解很差,一知半解的搞了好久。好在有了一点点的头绪,记录下省的以后忘记(突然发现自己以前用过的东西忘了好多……) 1.首先你要有个仓储模式的项目、这个自己搭建吧 2.在Program.cs文

.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移

前言 接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。 安装ORM框架,这里我们采用EFCore 安装EFCore 我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家

Asp-Net-Core开发笔记:使用原生的接口限流功能

前言 之前介绍过使用 AspNetCoreRateLimit 组件来实现接口限流 从 .Net7 开始,AspNetCore 开始内置限流组件,当时我们的项目还在 .Net6 所以只能用第三方的 现在都升级到 .Net8 了,当然是得来试试这个原生组件 体验后:配置使用都比较简单,不过功能也没有 A

如何在 Net6.0 中对 WebAPI 进行 JWT 认证和授权

一、简介 我们做微服务开发,或者说做分布式开发,有一项技术我们是避不开的,那就是WebAPI,在 Net6.0中,有两类 WebAPI,一类是极简 WebAPI,它砍掉了很多冗余的东西,更纯粹的是做 API的,也更适合做微服务的开发。另外一类就是我们通常使用的正常 API,这个没得说,也是我们使用最

.NET微服务系统迁移至.NET6.0的故事

本次迁移涉及的是公司内部一个业务子系统,该系统是一个多样化的应用,支撑着公司的多个业务方向。目前,该系统由40多个基于.NET的微服务应用构成,使用数千个CPU核心和数TB内存,在数百个Linux容器中运行。每天,该系统需要处理数十亿次请求。 该系统其中大部分服务是在2018-2019年左右由老旧.

.Net 中间件 - 新开源代码生成器 -ReZero

ReZero AP ReZero是一款.NET中间件 : 全网唯一界面操作就能生成API , 可以集成到任何.NET6+ API项目,无破坏性,也可让非.NET用户使用exe文件 ReZero生成器功能简介 1、表文档导出:支持目录导航 2、在创建表、在线建库 3、一键导入现有表 4、模版在线调试

开源低代码框架 ReZero API 正式版本发布 ,界面操作直接生成API

一、ReZero简介 ReZero是一款.NET中间件 : 全网唯一界面操作就能生成API , 可以集成到任何.NET6+ API项目,无破坏性,也可让非.NET用户使用exe文件 免费开源:MIT最宽松协议 , 一直从事开源事业十年,一直坚持开源 1.1 纯ReZero开发 适合.Net Core

C# .NET 6 使用WorkFlow Core 创建工作审批流

1,背景 工作流思想在上世纪60年代就有人提出过;70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现;80年代才出现第一批成功的工作流系统;90年代工作流技术走向了第一个发展高峰期;90年代后至今工作流出现了很多版本,但是主旨还是不变的,为了使我们的工作变得更加高效。 通俗点

关于.Net 6.0 在Linux ,Docker容器中,不安装任何依赖就生成图形验证码!!!!!!!!!!!

在.Net Framework时代,我们生成验证码大多都是用System.Drawing。 在.Net 6中使用也是没有问题的。 但是,System.Drawing却依赖于Windows GDI+。 为了实现跨平台,我陷入了沉思!! 微软推荐使用SkiaSharp 进行替代,所以就开始了,踩坑之旅

.NET Core使用SkiaSharp快速生成二维码( 真正跨平台方案)

前言 在.NET 6之前我们一直是使用QRCoder来生成二维码(QRCoder是一个非常强大的生成二维码的组件,用到了System.Drawing.Common 包),然后从.NET 6开始,当为非 Windows 操作系统编译引用代码时,平台分析器会发出编译时警告。异常如下: System.Ty