.net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务

前言:要实现自动扫描依赖注入,我们要先安装下面这两个nuget包
Autofac
Autofac.Extensions.DependencyInjection
  1. 新建两个文件夹IService用于存放接口,里面存放有IEnd和IOperation两个接口类,Service用于存放实现类,存放有End和Operation两个实现类,我们要做的是自动依赖注入服务,自动让IEnd和End对应
    .net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务_第1张图片
  2. 在Program.cs文件写入以下代码
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    //builder.RegisterModule();
    var assemblies = Assembly.GetExecutingAssembly();
    builder.RegisterAssemblyTypes(assemblies)//程序集内所有具象类 
    .Where(c => c.Name.EndsWith("Service"))
    .PublicOnly()//只要public访问权限的
    .Where(cc => cc.IsClass)//只要class型(主要为了排除值和interface类型) 
    .AsImplementedInterfaces();
});

.net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务_第2张图片
我来解析代码意思,下面这段代码的意思是,选择具有名称以 “Service” 结尾的类,并且它们必须是 public 访问权限的类,并且必须是 Class 类型的。然后,将这些类注册为它们实现的所有接口。

.Where(c => c.Name.EndsWith("Service"))
.PublicOnly()
.Where(cc => cc.IsClass)
.AsImplementedInterfaces();

.AsImplementedInterfaces() 方法会将每个选定的类注册为它们实现的所有接口。
具体来说,在这段代码中,当我们选定一个类时,.AsImplementedInterfaces() 方法会检查这个类实现了哪些接口,并将其注册为这些接口。
例如,如果我们有一个名为 UserService 的类,它实现了 IUserService 接口,那么在调用 .AsImplementedInterfaces() 方法时,Autofac会将 UserService 类注册为 IUserService 接口的实现。

因此,Autofac会根据类所实现的接口来找到对应的接口,并将这些接口作为类的服务注册到容器中。

#前面两步已经完成了自动扫描程序集批量依赖注入,下面是验证
验证:
  1. 在IService接口随便写一个方法,在Service实现该方法
    .net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务_第3张图片
    .net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务_第4张图片
    在控制器用构造函数初始化,然后调用该方法
    .net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务_第5张图片
    运行成功
    .net 6 web api中使用Autofac依赖注入框架实现批量自动扫描程序集注册服务_第6张图片

你可能感兴趣的:(.net,c#,Autofac,依赖注入,.net,core)