利用ASP.netCore自带DI(DependencyInjection)实现批量依赖注入
转载来源 http://www.cnblogs.com/xiaoliangge/p/7642372.html
ASP.net Core自带DI(依赖注入),用法如下:
services.AddScoped(typeof(IProductService), typeof(ProductService));
如果服务较多,必定造成文件难以维护
所以需要利用反射批量实现注册
核心代码如下:
一个类可能间接继承了多个接口(例如:public 和internal的接口),这里我们就以实现类为Key,所继承的接口为value构造一个集合
/// <summary> /// 获取程序集中的实现类对应的多个接口/// </summary> /// <param name="assemblyName">程序集</param>public Dictionary<Type, Type[]> GetClassName(string assemblyName){if (!String.IsNullOrEmpty(assemblyName)){Assembly assembly = Assembly.Load(assemblyName);List<Type> ts = assembly.GetTypes().ToList();var result = new Dictionary<Type, Type[]>();foreach (var item in ts.Where(s => !s.IsInterface)){var interfaceType = item.GetInterfaces();result.Add(item, interfaceType);}return result;}return new Dictionary<Type, Type[]>();}
注册:
我们现在可以把具体的注册例如
services.AddScoped(typeof(IProductService), typeof(ProductService));
改为:
//集中注册服务foreach (var item in GetClassName("Service")){foreach (var typeArray in item.Value){services.AddScoped(typeArray, item.Key);}}
完整代码:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.EntityFrameworkCore; using Entity.Table; using DAL; using System.Reflection; using Service;namespace ASP.NetCoreAPI {public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddDbContext<ProductContext>(options =>options.UseMySql(Configuration.GetConnectionString("MySqlConnection")));//添加Mysql支持//集中注册服务foreach (var item in GetClassName("Service")){foreach (var typeArray in item.Value){services.AddScoped(typeArray, item.Key);}}services.AddUnitOfWork<ProductContext>();//添加UnitOfWork支持//services.AddScoped(typeof(IProductService), typeof(ProductService));//用ASP.NET Core自带依赖注入(DI)注入使用的类services.AddMvc();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvc();}/// <summary> /// 获取程序集中的实现类对应的多个接口/// </summary> /// <param name="assemblyName">程序集</param>public Dictionary<Type, Type[]> GetClassName(string assemblyName){if (!String.IsNullOrEmpty(assemblyName)){Assembly assembly = Assembly.Load(assemblyName);List<Type> ts = assembly.GetTypes().ToList();var result = new Dictionary<Type, Type[]>();foreach (var item in ts.Where(s => !s.IsInterface)){var interfaceType = item.GetInterfaces();result.Add(item, interfaceType);}return result;}return new Dictionary<Type, Type[]>();}} }
转载于:https://www.cnblogs.com/pxtxws/p/8975173.html
利用ASP.netCore自带DI(DependencyInjection)实现批量依赖注入相关推荐
- ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)...
在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...
- ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...
在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...
- ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...
在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...
- ASP.NET MVC中使用Autofac实现简单依赖注入
本文参考资料: 1.https://www.cnblogs.com/RayWang/p/11128554.html. 2.https://www.cnblogs.com/eedc/p/6127181. ...
- .NET Core ASP.NET Core Basic 1-2 控制反转与依赖注入
本节内容为控制反转与依赖注入 简介 控制反转IOC 这个内容事实上在我们的C#高级篇就已经有所讲解,控制反转是一种设计模式,你可以这样理解控制反转,假设有一个人他有一部A品牌手机,他用手机进行听歌.打 ...
- 控制反转_.NET Core ASP.NET Core Basic 12 控制反转与依赖注入
本节内容为控制反转与依赖注入 简介 控制反转IOC 这个内容事实上在我们的C#高级篇就已经有所讲解,控制反转是一种设计模式,你可以这样理解控制反转,假设有一个人他有一部A品牌手机,他用手机进行听歌.打 ...
- IOC和DI 控制反转和依赖注入
首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/b ...
- ASP.NET Core如何在ActionFilterAttribute里做依赖注入
点击蓝字 关注我 在ASP.NET Core里,我们可以使用构造函数注入很方便地对Controller,ViewComponent等部件做依赖注入.但是如何给过滤器ActionFilterAttrib ...
- 通过编写DI容器来了解依赖注入-从头开始! (第2部分)
这是我的" DI从零开始"系列的第二部分. 在上一篇文章中,我们讨论了我们的基本示例以及"手动"方法存在的问题. 现在,我们要使服务网络的布线自动化. DI S ...
最新文章
- Anaconda 2019.03 发布,Python 跨平台科学计算软件
- Sql Server数据库数据导入到SQLite数据库中
- Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
- Android测试(二)——drozer使用
- python numpy库中省略号...的一些用法
- oidc auth2.0_将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成
- 使用Java 8 Lambda清理JUnit Throwable-Tests
- easy html css tree 简单的HTML css导航树
- Android 文件管理器 Android文件管理器源代码
- Sandbox简介和路径获取
- [纯前端]打造自己的ORK管理软件
- node.js 快速入门
- 漫威超级英雄大全(二)
- python ocr 识别中文pdf_基于Python实现对PDF文件的OCR识别
- 服务器显示屏 超出工作频率范围,如何解决显示器出错提示:超出工作频率范围...
- 2021-09-07 照书码——_——
- 我写过的软件之TSE-工作流程和实现
- Redis设置密码,查看密码,修改密码,忘记密码。
- pytorch 中 混合精度训练(真香)
- (转)深入理解最强桌面地图控件GMAP.NET --- SOSO地图
热门文章
- 凯立德手机导航APP全新升级 小长假结伴出行说走就走
- 单指手势,旋转,缩放
- 前缀、中缀、后缀表达式及其相互转化的Java实现
- [转]Android有效解决加载大图片时内存溢出的问题
- Java机器学习库ML之十模型选择准则AIC和BIC
- wordpress漏洞_多个WordPress插件SQL注入漏洞分析
- fastjson的值过滤器ValueFilter || fastjson输出字段为Null的两种
- Spring的新注解——Configuration、ComponentScan、Bean、Import、PropertySource || spring整合Junit分析
- java修改JFrame默认字体
- 关于eclipse 中文注释时中文字体太小的问题解决