nuget引入包
Autofac (5.2.0)
Autofac.Extensions.DependencyInjection (6.0.0)
1、替換默認容器
修改Program.cs下的CreateHostBuilder
UseServiceProviderFactory(new AutofacServiceProviderFactory())
2、批量注入
Startup.cs中添加
public void ConfigureContainer(ContainerBuilder builder){ Assembly service = Assembly.Load("AutofacNetCore.Service"); Assembly iservice = Assembly.Load("AutofacNetCore.IService"); builder.RegisterAssemblyTypes(service, iservice) .Where(t => t.FullName.EndsWith("Service") && !t.IsAbstract) //類名以service結尾,且類型不能是抽象的 .InstancePerLifetimeScope() //生命周期,, .AsImplementedInterfaces() .PropertiesAutowired(); //屬性注入 }
如果需要在controller中使用屬性注入,則需要修改Stratup.cs中的ConfigureServices方法和ConfigureContainer方法
ConfigureServices: services.AddControllersWithViews().AddControllersAsServices(); ConfigureContainer: var controllerBaseType = typeof(ControllerBase);
builder.RegisterAssemblyTypes(typeof(Program).Assembly)
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
.PropertiesAutowired();
3、使用
紅色為構造函數注入,藍色為屬性注入
屬性注入必須為public