天天看點

Autofac 中間件使用

0-添加 Autofac.Extensions.DependencyInjection 引用

1-NetCore 2.x 依賴注入模式

Autofac 中間件使用
Autofac 中間件使用
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  }      

View Code

2-NetCore 3.x 依賴注入模式

2.1-Program 中添加 UseServiceProviderFactory(new AutofacServiceProviderFactory())

Autofac 中間件使用
Autofac 中間件使用
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)

Autofac 中間件使用
Autofac 中間件使用
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         }      

漫漫人生,唯有激流勇進,不畏艱險,奮力拼搏,方能中流擊水,抵達光明的彼岸