安裝包:
Autofac
Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy
中文文檔:歡迎來到 Autofac 中文文檔! — Autofac 4.0 documentation (autofac-.readthedocs.io)
1.新建一個web api項目
新建一個AutofacMamager類,用於註冊
public class AutofacMamager { public class AutoFacManager : Module { // 重寫 Autofac 管道 Load方法, 在這裏注入 protected override void Load(ContainerBuilder builder) { /* 1.瞬態 InstancePerDependency(); 2.單例 SingleInstance(); 3.每個生命週期範圍一個實例 InstancePerLifetimeScope(); */ /*載程序集註冊*/ // 加載程序集 Assembly ifirstGrade = Assembly.Load("IModels"); // 添加程序集依賴 builder.RegisterAssemblyTypes(ifirstGrade) .Where(t => t.Name.EndsWith("Services"))//對象名後面有Services .AsImplementedInterfaces();//.InstancePerDependency(); Assembly firstGrade = Assembly.Load("Models"); builder.RegisterAssemblyTypes(firstGrade) .Where(t => t.Name.EndsWith("Services"))//對象名後面有Services .AsImplementedInterfaces();//.InstancePerDependency(); /*註冊具體類*/ //builder.RegisterType<Student>(); //builder.RegisterType(typeof(Student)); /*註冊實例*/ builder.RegisterType<Student>().As<IStudent>(); base.Load(builder); } } }
2.創建一個AutofacExtend類,用於替換
public static class AutofacExtend { public static void ReplaceAutofac(this WebApplicationBuilder builder) { // 替換Autofac builder.Host .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureContainer<ContainerBuilder>(build => { build.RegisterModule(new AutoFacManager()); }); } }
3.修改Program.cs
//Autofac builder.ReplaceAutofac(); var app = builder.Build();
4.創建一個控制器用戶測試
[Route("api/[controller]/[action]")] [ApiController] public class UserController : ControllerBase { private IStudent _student; private ISchoolboyServices _schoolboy; public UserController(IStudent student, ISchoolboyServices schoolboy) { _student=student; _schoolboy=schoolboy; } /// <summary> /// 獲取學生名稱 /// </summary> /// <returns></returns> [HttpPost] public string GetStudentName() { return _student.GetName(); } /// <summary> /// 一年級學生名稱 /// </summary> /// <returns></returns> [HttpPost] public string GetSchoolboyName() { return _schoolboy.Show(); } }