Autofac 中间件使用
0-添加 Autofac.Extensions.DependencyInjection 引用
1-NetCore 2.x 依赖注入模式
1 # 返回类型 改成 IServiceProvider 2 public IServiceProvider ConfigureServices(IServiceCollection services) 3 { 4 var builder = new ContainerBuilder(); 5 builder.Populate(services); 6 builder.RegisterAssemblyTypes(Assembly.Load("GR.Interfaces"), Assembly.Load("GR.Services")) 7 .AsSelf() 8 .AsImplementedInterfaces() 9 .InstancePerLifetimeScope() 10 .PropertiesAutowired(); 11 12 var Container = builder.Build(); 13 return new AutofacServiceProvider(Container); 14 }
2-NetCore 3.x 依赖注入模式
2.1-Program 中添加 UseServiceProviderFactory(new AutofacServiceProviderFactory())
1 public static IHostBuilder CreateHostBuilder(string[] args) => 2 Host.CreateDefaultBuilder(args) 3 .UseServiceProviderFactory(new AutofacServiceProviderFactory())//添加这行代码 4 .ConfigureWebHostDefaults(webBuilder => 5 { 6 webBuilder.UseStartup<Startup>(); 7 });
2.2-Startup 中添加方法 ConfigureContainer(ContainerBuilder builder)
1 public void ConfigureContainer(ContainerBuilder builder) 2 { 3 ////过滤器注册 4 //builder.RegisterAssemblyTypes(Assembly.Load("IoC.Web")) 5 // .Where(t => t.BaseType.FullName.Contains("Filter")) 6 // .AsSelf(); 7 // 8 9 builder.RegisterAssemblyTypes(Assembly.Load("IoC.Application"), 10 Assembly.Load("IoC.Domain")) 11 .Where(x => typeof(IScopedDenpency).IsAssignableFrom(x) && !x.IsAbstract) 12 .AsSelf() 13 .AsImplementedInterfaces() 14 .InstancePerLifetimeScope() 15 .PropertiesAutowired(); 16 17 builder.RegisterAssemblyTypes(Assembly.Load("IoC.Application"), 18 Assembly.Load("IoC.Domain")) 19 .Where(x => typeof(ISingletonDenpency).IsAssignableFrom(x) && !x.IsAbstract) 20 .AsSelf() 21 .AsImplementedInterfaces() 22 .SingleInstance() 23 .PropertiesAutowired(); 24 25 26 builder.RegisterAssemblyTypes(Assembly.Load("IoC.Application"), 27 Assembly.Load("IoC.Domain")) 28 .Where(x => typeof(ITraintDenpency).IsAssignableFrom(x) && !x.IsAbstract) 29 .AsSelf() 30 .AsImplementedInterfaces() 31 .InstancePerDependency() 32 .PropertiesAutowired(); 33 34 //builder.RegisterAssemblyTypes(Assembly.Load("IoC.Application"), Assembly.Load("IoC.Domain")) 35 // .AsSelf() 36 // .AsImplementedInterfaces() 37 // .InstancePerLifetimeScope() 38 // .PropertiesAutowired(); 39 }
漫漫人生,唯有激流勇进,不畏艰险,奋力拼搏,方能中流击水,抵达光明的彼岸