ASP.NET CORE 学习之原生DI实现批量注册
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET CORE 学习之原生DI实现批量注册,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2987字,纯文字阅读大概需要5分钟。
内容图文
![ASP.NET CORE 学习之原生DI实现批量注册](/upload/InfoBanner/zyjiaocheng/813/fc900c182c5546ea983b3b20dfbe5080.jpg)
以前使用Autofac的时候,只需一句AsImplementInterfaces()就可以很轻松实现批量注册功能。而asp.net core内置的DI框架没有现成的批量注册方法,考虑到替换Autofac框架过程有些繁琐,于是自己写扩展实现了一个简易的原生DI批量注册功能
Startup.cs扩展
1 public static class StartUpExtenions 2 { 3 /// <summary> 4 /// 批量注册服务 5 /// </summary> 6 /// <param name="services">DI服务</param> 7 /// <param name="assemblys">需要批量注册的程序集集合</param> 8 /// <param name="baseType">基础类/接口</param> 9 /// <param name="serviceLifetime">服务生命周期</param> 10 /// <returns></returns> 11 public static IServiceCollection BatchRegisterService(this IServiceCollection services, Assembly[] assemblys, Type baseType, ServiceLifetime serviceLifetime = ServiceLifetime.Singleton) 12 { 13 List<Type> typeList = new List<Type>(); //所有符合注册条件的类集合 14 foreach (var assembly in assemblys) 15 { 16 //筛选当前程序集下符合条件的类 17 var types = assembly.GetTypes().Where(t => !t.IsInterface && !t.IsSealed && !t.IsAbstract && baseType.IsAssignableFrom(t)); 18 if (types != null && types.Count() > 0) 19 typeList.AddRange(types); 20 } 21 if (typeList.Count() == 0) 22 return services; 23 24 var typeDic = new Dictionary<Type, Type[]>(); //待注册集合 25 foreach (var type in typeList) 26 { 27 var interfaces = type.GetInterfaces(); //获取接口 28 typeDic.Add(type, interfaces); 29 } 30 if (typeDic.Keys.Count() > 0) 31 { 32 foreach (var instanceType in typeDic.Keys) 33 { 34 foreach (var interfaceType in typeDic[instanceType]) 35 { 36 //根据指定的生命周期进行注册 37 switch (serviceLifetime) 38 { 39 case ServiceLifetime.Scoped: 40 services.AddScoped(interfaceType, instanceType); 41 break; 42 case ServiceLifetime.Singleton: 43 services.AddSingleton(interfaceType, instanceType); 44 break; 45 case ServiceLifetime.Transient: 46 services.AddTransient(interfaceType, instanceType); 47 break; 48 } 49 } 50 } 51 } 52 return services; 53 } 54 }
在ConfigureServices方法中调用批量注册
1 services.BatchRegisterService(new Assembly[] { Assembly.GetExecutingAssembly(), Assembly.Load("Test.DAL") }, typeof(IDependency));
经测试 ,使用扩展批量注册的方式注册的服务类正常工作
内容总结
以上是互联网集市为您收集整理的ASP.NET CORE 学习之原生DI实现批量注册全部内容,希望文章能够帮你解决ASP.NET CORE 学习之原生DI实现批量注册所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。