在ASP.NET Core中实现自动注入、批量注入
程序员文章站
2022-06-04 19:38:15
我们在使用AddScoped、AddTransient、AddSingleton这类方法的时候很是麻烦。我们每增加一个接口以及其实现的时候,是不是需要在这里硬编码注册一行代码呢?项目小还好,但当我们的项目变得庞大之后,这里的依赖注入怎么来维护呢?在网上翻了半天,看了很多方法,其代码的实现个人感觉都不 ......
我们在使用addscoped、addtransient、addsingleton这类方法的时候很是麻烦。我们每增加一个接口以及其实现的时候,是不是需要在这里硬编码注册一行代码呢?项目小还好,但当我们的项目变得庞大之后,这里的依赖注入怎么来维护呢?
在网上翻了半天,看了很多方法,其代码的实现个人感觉都不是太优雅,想想还是自己写一个比较实用吧,我们只需按照一个规定来定义和实现接口。应用程序就能自动扫描并注册这些程序集中的接口和对应实现类,完成依赖注入的自动注册,具体的实现可以通过接口或特性来实现,如果需要区分addscoped、addtransient、addsingleton可以通过定义不同的接口去实现,这里我们定义idenpendency接口做演示,具体实现如下:
第一步:创建如下这样一个空接口
public interface idenpendency { }
第二步:创建需要注入的功能接口,这类接口就是你想实现某些功能的封装,它们都继承第一步创建的接口idenpendency,如下,我创建一个功能接口
public interface iuserservice:idenpendency
{
//function
}
第三步:实现需要注入的功能接口,如下,我创建了一个实现userservice的类
public class userservice:iuserservice
{
//function的具体实现
}
第四步:扩展iservicecollection批量注入方法adddataservice
public static class dataserviceextension { /// <summary> /// 注入数据 /// </summary> /// <param name="services"></param> public static iservicecollection adddataservice(this iservicecollection services) { #region 依赖注入 //services.addscoped<iuserservice, userservice>(); var basetype = typeof(idependency); var path = appdomain.currentdomain.relativesearchpath ?? appdomain.currentdomain.basedirectory; var referencedassemblies = system.io.directory.getfiles(path, "*.dll").select(assembly.loadfrom).toarray(); var types = referencedassemblies .selectmany(a => a.definedtypes) .select(type => type.astype()) .where(x => x != basetype && basetype.isassignablefrom(x)).toarray(); var implementtypes = types.where(x => x.isclass).toarray(); var interfacetypes = types.where(x => x.isinterface).toarray(); foreach (var implementtype in implementtypes) { var interfacetype = interfacetypes.firstordefault(x => x.isassignablefrom(implementtype)); if (interfacetype != null) services.addscoped(interfacetype, implementtype); } #endregion return services; } }
第五步:在startup.cs调用adddataservice方法进行批量注入
本人原创文章,非商业用途可随意转载,转载请保留原文出处
上一篇: 微信公众号怎么做互推具体有哪些方式
推荐阅读
-
详解ASP.NET Core 在 JSON 文件中配置依赖注入
-
在ASP.NET Core中实现一个Token base的身份认证实例
-
在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)
-
在net Core3.1上基于winform实现依赖注入实例
-
在ASP.NET Core中使用托管启动(hosting startup)程序集,实现批量注册service
-
在ASP.NET Core中实现自动注入、批量注入
-
ASP.NET Core - 在ActionFilter中使用依赖注入
-
asp.net core 依赖注入实现全过程粗略剖析(2)
-
asp.net core 依赖注入实现全过程粗略剖析(1)
-
Spring.Net是怎么在MVC中实现注入的(原理)