2020/01/30, ASP.NET Core 3.1, VS2019, Autofac.Extensions.DependencyInjection 5.0.1html
摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【9.1-使用Autofac代替原生的依赖注入】
使用Autofac替换原生的依赖注入git
文章目录github
此分支项目代码json
本章节介绍了使用Autofac代替原生的依赖注入,使用Autofac为的是后面配合Castle.Core作AOP动态代理后端
向MS.WebApi
应用程序中添加Autofac.Extensions.DependencyInjection
包:架构
<ItemGroup> <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="5.0.1" /> </ItemGroup>
注意此处包和下一章节会用到Autofac.Extras.DynamicProxy包二者须要配合使用,详情看下一章节app
打开Program.cs
类,给Host.CreateDefaultBuilder(args)
添加代码.UseServiceProviderFactory(new AutofacServiceProviderFactory())
:
注意须要添加引用:using Autofac.Extensions.DependencyInjection;
ide
在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测试接口,发现服务都是正常被调用的: