2020/01/30, ASP.NET Core 3.1, VS2019, Autofac.Extensions.DependencyInjection 5.0.1

摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【9.1-使用Autofac代替原生的依赖注入】

使用Autofac替换原生的依赖注入

文章目录

此分支项目代码

本章节介绍了使用Autofac代替原生的依赖注入,使用Autofac为的是后面配合Castle.Core做AOP动态代理

添加包引用

MS.WebApi应用程序中添加Autofac.Extensions.DependencyInjection包:

<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="5.0.1" />
</ItemGroup>

注意此处包和下一章节会用到Autofac.Extras.DynamicProxy包两者需要配合使用,详情看下一章节

替换DI容器

修改Program.cs

打开Program.cs类,给Host.CreateDefaultBuilder(args)添加代码.UseServiceProviderFactory(new AutofacServiceProviderFactory())



注意需要添加引用:using Autofac.Extensions.DependencyInjection;

修改Startup.cs

在Startup类中,注释掉原本的构造函数,并添加以下代码:

public ILifetimeScope AutofacContainer { get; private set; }

public Startup(IWebHostEnvironment env)
{
// In ASP.NET Core 3.0 `env` will be an IWebHostingEnvironment, not IHostingEnvironment.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
//添加autofac的DI配置容器
public void ConfigureContainer(ContainerBuilder builder)
{ }

注意要添加using Autofac;引用。

完成后如下图所示:

至此,Autofac替换原生依赖注入就完成了,可以在新加的ConfigureContainer方法中使用Autofac的方法注册服务。

使用

我们把之前写的IBaseService、IRoleService两个服务改成Autofac注册试试。

先把之前的注册删掉:

services.AddScoped<IBaseService, BaseService>();
services.AddScoped<IRoleService, RoleService>();

在ConfigureContainer中添加以下代码:

//注册IBaseService和IRoleService接口及对应的实现类
builder.RegisterType<BaseService>().As<IBaseService>().InstancePerLifetimeScope();
builder.RegisterType<RoleService>().As<IRoleService>().InstancePerLifetimeScope();

完成后,启动项目,打开Postman测试接口,发现服务都是正常被调用的:

ASP.NET Core搭建多层网站架构【9.1-使用Autofac代替原生的依赖注入】的更多相关文章

  1. ASP.NET Core搭建多层网站架构【0-前言】

    2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构 目录 0-前言 1-项目结构分层建立 2-公共基 ...

  2. ASP.NET Core搭建多层网站架构【1-项目结构分层建立】

    2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[1-项目结构分层建立] 文章目录 此分支项目代码 ...

  3. ASP.NET Core搭建多层网站架构【2-公共基础库】

    2020/01/28, ASP.NET Core 3.1, VS2019,Newtonsoft.Json 12.0.3, Microsoft.AspNetCore.Cryptography.KeyDe ...

  4. ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

    2020/01/28, ASP.NET Core 3.1, VS2019, xUnit 2.4.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[3-xUnit单元测试 ...

  5. ASP.NET Core搭建多层网站架构【4-工作单元和仓储设计】

    2020/01/28, ASP.NET Core 3.1, VS2019, Microsoft.EntityFrameworkCore.Relational 3.1.1 摘要:基于ASP.NET Co ...

  6. ASP.NET Core搭建多层网站架构【5-网站数据库实体设计及映射配置】

    2020/01/29, ASP.NET Core 3.1, VS2019, EntityFrameworkCore 3.1.1, Microsoft.Extensions.Logging.Consol ...

  7. ASP.NET Core搭建多层网站架构【6-注册跨域、网站核心配置】

    2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站 ...

  8. ASP.NET Core搭建多层网站架构【7-使用NLog日志记录器】

    2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站 ...

  9. ASP.NET Core搭建多层网站架构【8.1-使用ViewModel注解验证】

    2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[8.1-使用ViewModel注解验证] 使用V ...

随机推荐

  1. 关于Excute()方法,与in参数连用

    DECLARE @tempTbl TABLE(OrderNo VARCHAR(50)) DECLARE @orderNos VARCHAR(4000) SET @orderNos='''3f1a82c ...

  2. HTML的创建

    创建一个HTML 直到产生scr文件之前的创建和原来建Java项目一样. 把scr文件Delete. 创建HTML File 4. 设置浏览器(我用的是搜狗浏览器,所以先找到搜狗的exe文件位置,导入 ...

  3. java测试框架详细说明-mvn+testng+allure

    java测试框架 mvn+testng+allure 1.mvn代码目录结构 2.testng框架 2.1 testng.xml配置 2.2 注解 3.allure插件,方便报告阅览 4.配置文件.p ...

  4. BLUE引擎检查放入装备的名称全名脚本

    格式:CHECKDLGITEMNAME 名称 检查条件需要配合QUERYITEMDLG命令 ;========================================== [@main]#AC ...

  5. docker 环境部署

    docker 查看所有容器 docker ps  -a docker 查看所有running 容器: docker ps docker 停止全部容器: docker stop $(docker ps  ...

  6. Linux - Linux中线程为何有PID?

    重现 用htop的Tree view(按F5)之后查看线程 参考 https://segmentfault.com/q/1010000003586656 mousycoder的回答 https://u ...

  7. 第二十五篇 玩转数据结构——链表(Linked List)

          1.. 链表的重要性 我们之前实现的动态数组.栈.队列,底层都是依托静态数组,靠resize来解决固定容量的问题,而"链表"则是一种真正的动态数据结构,不需要处理固定容 ...

  8. Bugku-CTF之本地包含( 60)

    Day36  

  9. 吴裕雄 python 机器学习——人工神经网络与原始感知机模型

    import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ...

  10. Go_goroutine初识

    package main import ( "fmt" ) func main() { /* 一个goroutine打印数字,另外一个goroutine打印字母,观察运行结果.. ...