.NETCore 批量注册 Service 到 IOC

Service 主要面向数据库,为数据库提供一个统一的 CURD 接口。在日常的使用中,通常把 Service 层注册为 Scoped 类型,随着上下文变动。

在实际开发中,会有非常多的 Service,可以使用如下方法将这些 Service 进行批量注册:

定义服务基类

首先,需要定义一个空接口 IService,所有的 Service 都继承该接口,这样就可以找到当前程序集中所有实现了 IService 接口的类进行批量注册。

批量注册

直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 扩展方法
public static IServiceCollection MapServices(this IServiceCollection services)
{
// 批量注入 Services 单例
var serviceBaseType = typeof(IService);
var serviceTypeList = Assembly.GetCallingAssembly()
.GetTypes()
.Where(x => !x.IsAbstract && serviceBaseType.IsAssignableFrom(x))
.ToList();
serviceTypeList.ForEach(type => services.AddTransient(type));
return services;
}

// 使用
builder.services.MapServices();