下载依赖包
PM> Install-Package Autofac.Extensions.DependencyInjection
配置容器
-
通过 IServiceCollection 配置
services.AddAutofac(container => { // 配置注入 });
-
通过 ConfigureContainer 进行配置
使用该方法时需要在 IHostBuilder 添加 Autofac 服务提供工厂
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) //增加服务工厂 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
然后可以在 Startup 中配置
public void ConfigureContainer(ContainerBuilder builder) { // 注册一个实例 builder.Register(t => new test()).As<test>(); // 按类型注册 builder.RegisterType<test>(); builder.RegisterType(typeof(test)); // 按模块注册 builder.RegisterModule(new AutoFacModel()); // 按程序集注册 builder.RegisterAssemblyTypes();
通过模块注入
public class AutoFacModel : Module { protected override void Load(ContainerBuilder builder) { // 获取程序集 var assemblysServices = Assembly.LoadFrom(@"指定程序集路径"); // 注册程序集中类 builder.RegisterAssemblyTypes(assemblysServices) //.PublicOnly()// 只注册公共类型 //.Where(t => t.Name.Contains("DI"))// 自定义过滤注册 类型名称名中有DI的才注册 //.Except<MyCustomizedType>(ct => // ct.As<ISpecial>().SingleInstance()); .AsImplementedInterfaces()// 实现接口 .InstancePerDependency()// 瞬时生命周期 .AsSelf()// 实现本身 .PropertiesAutowired();//允许循环依赖 // 创建服务容器 // 项目中只能构建一次 CreateHostBuilder(args).Build() var container = builder.Build(); // 创建 Scope 作用域 using (var scope = container.BeginLifetimeScope()) { // 尝试取出服务 var component = scope.ResolveOptional<test>(); var component1 = scope.ResolveOptional<ITest>(); } } }