韩国食品网站设计欣赏,河北农业建设信息网站,开发流程有哪些阶段,搭建一个网页.Net Core根据文件名称自动注入服务 说明分析逻辑所有代码一键注入 说明
这个适用于.Net Core 的Web项目,且需要在服务中注入接口的需求.因为之前些Java Web习惯了,所以会有Dao层,Serivce层和Controller层.但是如果一个项目里面对于不同的数据库会有多个Dao,如果一个一个引入会… .Net Core根据文件名称自动注入服务 说明分析逻辑所有代码一键注入 说明
这个适用于.Net Core 的Web项目,且需要在服务中注入接口的需求.因为之前些Java Web习惯了,所以会有Dao层,Serivce层和Controller层.但是如果一个项目里面对于不同的数据库会有多个Dao,如果一个一个引入会造成代码.可读性变差.使用以下方法可以根据文件命名来提取固定的接口与实现类,并自动注入 到服务中.
分析逻辑
首先知道注入接口的方法为: services.AddScoped(interfaceType, type);通过映射的方法扫描项目中所有文件命名(如果怕效率低也可以只扫描制定目录下文件),我这里定义接口以Dao结尾,实现类以DaoImpl结尾,以此定义两个变量: var interfaceSuffix Dao;var implementationSuffix DaoImpl;然后根据检索文件名称,拿到接口与实现类的列表:
var interfaceTypes assembly.GetTypes().Where(t t.IsInterface t.Name.EndsWith(interfaceSuffix)).ToArray();var types assembly.GetTypes().Where(t t.IsClass !t.IsAbstract t.Name.EndsWith(implementationSuffix)).ToList();再将两个list结合,批量写入: 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);}}}所有代码
public static class ServiceCollectionExtensions
{public static IServiceCollection AddDaosWithConvention(this IServiceCollection services, Assembly assembly){var interfaceSuffix Dao;var implementationSuffix DaoImpl;var interfaceTypes assembly.GetTypes().Where(t t.IsInterface t.Name.EndsWith(interfaceSuffix)).ToArray();var types assembly.GetTypes().Where(t t.IsClass !t.IsAbstract t.Name.EndsWith(implementationSuffix)).ToList();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;}
}一键注入
builder.Services.AddDaosWithConvention(Assembly.GetExecutingAssembly());