ASP.NET Core搭建多層網站架構【9.1-使用Autofac代替原生的依賴注入】


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測試接口,發現服務都是正常被調用的:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM