Asp.net Core 中一键注入接口
- 前言
- 准备
- 开始
- 使用
前言
在之前开发Asp.Net Core程序时遇到接口需要一个一个的注入到Services中,当有非常多的接口需要注入时会显得代码成为了一座山,这里记录一下如何通过接口的命名一键自动注入.
准备
IDE: Visual studio 2022
.Net版本:.Net 8
开始
首先是接口的命名需要规范,列如接口命名为TestDao
,实现类命名为TestDaoImpl
,这里就以Dao
于DaoImpl
来做示范.
新建一个类,命名为ServiceCollectionExtensions
,内容如下:
public static IServiceCollection AddDaosWithConvention(this IServiceCollection services, Assembly assembly){var interfaceSuffix = "Dao"; // 接口命名结尾var implementationSuffix = "DaoImpl";// 实现类命名结尾// 通过反射的机制来寻找所有的接口命名符合interfaceSuffix 结尾的var interfaceTypes = assembly.GetTypes().Where(t => t.IsInterface && t.Name.EndsWith(interfaceSuffix)).ToArray();// 通过反射的机制来寻找所有的实现类命名符合interfaceSuffix 结尾的var types = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.Name.EndsWith(implementationSuffix)).ToList();// 使用AddScoped注入所有符合的接口与实现类foreach (var interfaceType in interfaceTypes){foreach (var type in types){var interfaceName = type.GetInterfaces().FirstOrDefault(i => i.Name == interfaceType.Name)?.Name;if (interfaceName != null){services.AddScoped(interfaceType, type);}}}return services;}
使用
在Program.cs
文件中添加:
builder.Services.AddDaosWithConvention(Assembly.GetExecutingAssembly());
当上述配置完成后,在创建完接口与实现类后可以直接引用,不需要再去注册.