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();
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 }