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

如此这样就结束了!
NET6使用AutoFac依赖注入(仓储模式)的更多相关文章
- 从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入
一.测试仓储层.业务层是否能实现对数据库表的操作 1.创建IsysUserInfoRepository接口来继承IBaseRepository父接口 namespace Wchl.WMBlog.IRe ...
- 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入
PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.测试仓储层.业务层是否能实现对数据库表的操作 1.在52MVCBlog.IRepository程序集下创建IsysUserInf ...
- ASP.NETCore使用AutoFac依赖注入
原文:ASP.NETCore使用AutoFac依赖注入 实现代码 1.新建接口类:IRepository.cs,规范各个操作类的都有那些方法,方便管理. using System; using Sys ...
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
- Autofac依赖注入
简介 Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 .它的实现方式是将常规的.net类当做 组件 处理. ...
- Autofac 依赖注入小知识
Autofac 依赖注入小知识 控制反转/依赖注入 IOC/DI 依赖接口而不依赖于实现,是面向对象的六大设计原则(SOLID)之一.即依赖倒置原则(Dependence Inversion Prin ...
- asp.net mvc4 简单使用Autofac依赖注入小结
1,首先使用 NuGet下载适当的Autofac版本 文件一,Autofac.3.5.2 文件二,Autofac.Mvc4.3.1.0 1,接口类 public interface IReposito ...
- ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下
先简单了解一这个几个 名词的意思. 控制反转(IOC) 依赖注入(DI) 并不是某种技术. 而是一种思想.一种面向对象编程法则 什么是控制反转(IOC)? 什么是依赖注入(DI) 可以点击下面链接 ...
- Autofac依赖注入框架使用
简介: Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高 控制反转和依赖注入: 控制反转 IOC(Inver ...
- Quartz使用AutoFac依赖注入问题小结
theme: channing-cyan highlight: a11y-dark 背景 最近在做一个需求,就是在Job中捕捉异常,然后通过邮件或者消息的方式推送给指定人员,在需求实现的过程中遇到的一 ...
随机推荐
- 从2s优化到0.1s,我用了这5步
前言 分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中. 但就是这样一个简单的分类树查询功能,我们却优化了5次. 到底是怎么回事呢? 背景 我们的网站使用了SpringBoot推荐的 ...
- 运营商业务系统基于 KubeSphere 的容器化实践
本篇文章是 KubeSphere 2020 年度 Meetup 上讲师宋磊分享内容整理而成. 大家好,我是宋磊,在运营商的一个科技子公司任职,主要做大数据业务.我主要负责公司的 IaaS 层和 Paa ...
- 12C RAC 故障分析 - ORA-17503: ksfdopn:2 Failed to open file +DATA/EIC1/PASSWORD/pwdeic1.256.957086685
一.故障描述 Oracle 12C PDBS(PDB NAME = WRYPC) 在note1节点上是MOUNTED状态,在note2节点上是READ WRITE状态.note1节点上启动该PDB长时 ...
- SpringBoot用户头像上传
1.上传到本地服务器 controller层主要以MultipartFile接收即可,这里返回给前端的该文件保存后的相对路径 @RequestMapping(value = "/applic ...
- Django运行服务报NameError: name ‘os‘ is not defined
出现Bug: 原因:这里调用了os模块,但是文件头并没引用os模块 解决办法:在settings.py文件头加上:
- JS 识别安卓还是ios苹果、识别是否微信内置浏览器、手机类型
1.识别手机平台是IOS还是安卓 /** * [isMobile 判断平台] * @param test: 0:iPhone 1:Android */ function ismobile(test) ...
- JavaScript String 对象-常用知识点
JavaScript String 对象-常用知识点 对象用于处理文本(字符串). 对象创建方法: new String(). String 对象属性 属性 描述 constructor 对创建该对象 ...
- 每秒550万亿次算力!打破世界纪录!中国造全球首例纯电驱全尺寸人形机器人!直击全球最快人形机器人“天工”The world's first purely electric humanoid robot
地址: https://www.youtube.com/watch?v=uRc-885NpD4
- 3.7 Linux切换目录(cd命令)
cd 命令,是 Change Directory 的缩写,用来切换工作目录. Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令.所谓 Shell 内置命令,就是 She ...
- Volatility 内存取证基础
实操 (需要下面这个内存取证的私我)