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