Autofac的简单使用:

由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合:

删掉Class1,把Wsk.Core、Wsk.Core.Filter里面到包删掉,引用到Package里面,然后需要用到包的项目,都引用package这个类库项目。这样可以防止将来项目多了,版本环境如果不一致导致的版本冲突。更改以后的目录架构:

添加依赖注入的两个关键包:Autofac.Extensions.DependencyInjection 和 Autofac.Extras.DynamicProxy

然后在Program添加Autofac的支持:

接着,新建一个类库项目,例如叫做 Wsk.Core.Service,然后新建一个类,叫做TestAutofac,以及对应的接口 ITestAutofac,以及一个方法叫做Test,用于做依赖注入实现的测试使用:

接下来,在启动项目里面添加该依赖项目,然后在Startup里面的ConfigureServices方法里面,添加对ITestAutofac的单例注册实现:

改写先前的WSK控制器,添加构造函数的依赖注入,以及修改或新增一个用于测试的方法,此处改写了HelloWorld方法,为了看出效果,只打印以上方法的输出内容:

测试一下效果:执行程序,并在swagger上面手动调用:

显示预期内容,代表依赖注入成功。

接下来,使用注入整个类库来实现依赖注入,用于接口和类很多的情况下,为了方便,就可以把类库下面的所有接口全部暴露出来进行依赖注入。

在启动项目里面,新建一个文件夹,叫Common,在里面新建类AutofacRegister,并继承Autofac.Module ,在类下面重写 Load 方法:

在startup里面,注释掉上面的实现方法,新建ConfigureContainer容器:

最后进行启动测试

测试成功,完结撒花~~

最后总结一点东西:

AddSingleton(),只在首次请求会创建服务,后续所有请求都会使用该实例。

AddScoped(),不同的请求,实例不同。

AddTransient(),临时服务,每次请求都会创建一个新的服务实例

本篇章有关源码如下:

AutofacRegister

public class AutofacRegister: Autofac.Module
{
protected override void Load(ContainerBuilder container)
{
var assemblysServices = Assembly.Load("Wsk.Core.Service"); // 需要暴露接口所在的程序集
container.RegisterAssemblyTypes(assemblysServices)
.SingleInstance() // 设置单例注入
.AsImplementedInterfaces() // 把所有接口全暴露出来
.EnableInterfaceInterceptors();
}
}

ConfigureContainer

public void ConfigureContainer(ContainerBuilder container)
{
container.RegisterModule(new AutofacRegister());
}

TestAutofac 、ITestAutofac

 public class TestAutofac:ITestAutofac
{
public void Test()
{
Console.WriteLine("This is Autofac Test ……");
}
}

public interface ITestAutofac
{
void Test();
}

最后,如果觉得有帮助,还请各位大大们打赏、点赞或留言

五:.net core(.NET 6)使用Autofac实现依赖注入的更多相关文章

  1. NET Core源代码通过Autofac实现依赖注入

    查看.NET Core源代码通过Autofac实现依赖注入到Controller属性   阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Cor ...

  2. NopCommerce使用Autofac实现依赖注入

    NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...

  3. .net core程序中使用微软的依赖注入框架

    我之前在博文中介绍过Asp.net core下系统自带的依赖注入框架,这个依赖框架在Microsoft.Extensions.DependencyInjection中实现,本身并不是.net core ...

  4. Web API(六):使用Autofac实现依赖注入

    在这一篇文章将会讲解如何在Web API2中使用Autofac实现依赖注入. 一.创建实体类库 1.创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: us ...

  5. .Net Core 最简洁的约定式依赖注入

    .Net Core 最简洁的约定式依赖注入 github:https://github.com/280780363/guc/tree/master/src/Guc.Kernel/Dependency ...

  6. .net core学习笔记(3)-依赖注入

    .net core 中使用了大量的依赖注入,对依赖注入一直是一知半解,总想不透,项目中用的是一个网上的开源框架,从底层到web层都是用的构造函数依赖注入. 然后了在继承ActionFilterAttr ...

  7. Autofac之依赖注入

    这里主要学习一下Autofac的依赖注入方式 默认构造函数注入 class A { public B _b; public A() { } public A(B b) { this._b = b; } ...

  8. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

    Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等. 如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的 ...

  9. [ASP.NET Core开发实战]基础篇02 依赖注入

    ASP.NET Core的底层机制之一是依赖注入(DI)设计模式,因此要好好掌握依赖注入的用法. 什么是依赖注入 我们看一下下面的例子: public class MyDependency { pub ...

随机推荐

  1. 记一次linux下安装ftp的愉快体验

    三三两两,试了几次就出来了,挺开心的 linux安装vsftpd,请自行百度 贴出部分配置点 阿里云服务器,开发相关端口以及部分区域端口访问 /etc/pad.d/vsftpd添加部分注释 #%PAM ...

  2. 关于Oracle 数据库使用dba_tables或者all_tables或者user_tables统计数据时,与直接查询表统计时数据不一致的记录

    1. 今天写代码发现这个问题,这里记录一下, 不一致的原因是因为  dba_tables .all_tables.user_tables 不是实时的反应表的数据的,所以需要在查询统计之前对表进行手动分 ...

  3. Python模块化编程

    目录 模块化 自定义模块 模块的内置属性 导入模块 安装第三方模块 查看模块的属性和方法 模块化 在Python中,一个.py文件就称之为一个模块(Module),为了避免模块名冲突,Python又引 ...

  4. 手动添加导入表修改EXE功能

    目标: 改动PE导入表,手工给HelloWorld增加一个功能,就是启动的时候写入一条开机启动项,C:\cmd0000000000000000000000000000.exe 实现方法: 直接在注册相 ...

  5. node-多进程

    Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能. 每个子进程总是带有三个流对象: child.stdin, ...

  6. 修改VScode底部状态栏颜色

    点击齿轮进入setting 搜索workbench.colorCustomizations,然后点击编辑setting.json 修改为你喜欢的颜色即可,我这里修改为蓝色 例子: "work ...

  7. windows桌面图标及任务管理栏丢失

    背景环境: 卸载某些软件,如Auto CAD 2011 之后,会出现桌面图标和任务栏丢失的现象,某些重要文件没有保存或者不能注销及重启的动作 1:按组合键Ctrl+Shift+Esc,键调出任务管理器 ...

  8. 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出

    目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...

  9. CSS3过渡应用

    小米图标转换 transition:需要过渡的属性 花费时间 (运动曲线 何时开始): Tips: 1.第二个属性值必须跟上单位(s) 2.谁要过渡给谁加 图标转换最终效果:当鼠标划过图标时,缓慢转换 ...

  10. COS 数据湖最佳实践:基于 Serverless 架构的入湖方案

    01 前言 数据湖(Data Lake)概念自2011年被推出后,其概念定位.架构设计和相关技术都得到了飞速发展和众多实践,数据湖也从单一数据存储池概念演进为包括 ETL 分析.数据转换及数据处理的下 ...