Autofac 中间件使用

Posted ganqiyin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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  }
View Code

 

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                 });
View Code

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         }
View Code

 

以上是关于Autofac 中间件使用的主要内容,如果未能解决你的问题,请参考以下文章

浅析依赖注入框架Autofac的使用

Autofac使用代码方式进行组件注册不需要依赖

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

Autofac 集成测试 在 ConfigureContainer 之后进行 Mock 注入

Autofac

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段