AutoMapper 9.0的改造(续)
上一篇有一个读者,有疑问,如何自动化注册Dto
我开篇,做了一个自动化注册的
public sealed class AutoInjectAttribute : Attribute{public Type SourceType { get; }public Type TargetType { get; }public AutoInjectAttribute(Type sourceType, Type targetType){SourceType = sourceType;TargetType = targetType;}}
增加了一个特性,在Dto上面打上,参数1是源类型,参数2是Dto类型
增加一个工厂类保存自动转换的类型
public class AutoInjectFactory{public List<(Type,Type)> ConvertList { get; } = new List<(Type, Type)>();public void AddAssemblys(params Assembly[] assemblys){foreach (var assembly in assemblys){var atributes = assembly.GetTypes().Where(_type => _type.GetCustomAttribute<AutoInjectAttribute>() != null).Select(_type => _type.GetCustomAttribute<AutoInjectAttribute>());foreach (var atribute in atributes){ConvertList.Add((atribute.SourceType, atribute.TargetType));}}}}
在原来的AddAutoMapper上找到修改的代码段
public static IServiceCollection AddAutoMapper(this IServiceCollection service){...略service.TryAddSingleton(serviceProvider =>{var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();var instance = new MapperConfiguration(mapperConfigurationExpression);instance.AssertConfigurationIsValid();return instance;});...略return service;}
改为
public static IServiceCollection AddAutoMapper(this IServiceCollection service){...略service.TryAddSingleton(serviceProvider =>{var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();var factory = serviceProvider.GetRequiredService<AutoInjectFactory>();foreach (var (sourceType,targetType) in factory.ConvertList){mapperConfigurationExpression.CreateMap(sourceType, targetType);}var instance = new MapperConfiguration(mapperConfigurationExpression);instance.AssertConfigurationIsValid();return instance;});...略return service;}
增加一组扩展方法
public static class AutoMapperExtension{...略public static void UseAutoInject(this IApplicationBuilder applicationBuilder, params Assembly[] assemblys){var factory = applicationBuilder.ApplicationServices.GetRequiredService<AutoInjectFactory>();factory.AddAssemblys(assemblys);}}
在Startup.Configure方法内调用一下
看看测试
增加一个测试控制器
执行结果
转载于:https://www.cnblogs.com/NCoreCoder/p/11453443.html
AutoMapper 9.0的改造(续)相关推荐
- AutoMapper 9.0的改造
AutoMapper于2019.8.12升级9.0 从此不再支持静态的对象转换 自己琢磨了一下,写了一套扩展 官方链接如下 https://github.com/AutoMapper/AutoMapp ...
- IIS6.0架构(续)
IIS6.0架构(续) 4. W3Core 4.1.概述 W3Core又称为工作进程(Worker Process)或W3WP.exe.在默认情况下,IIS 6.0是在工作进程隔离模式下运行的.对 ...
- AutoMapper 8.0的应用--动态配置
AutoMapper 8.0中,需要使用configure来配置mapper.为此,实现动态的类型配置如下 public static class AutoMapHelper { ...
- AutoMapper 9.0的使用
AutoMapper于2019.8.12升级9.0 从此不再支持静态的对象转换 自己琢磨了一下,写了一套扩展 官方链接如下 https://github.com/AutoMapper/AutoMapp ...
- mercurymw305r虚拟服务器,Mercury MW305R v3.0 路由器改造 LEDE(OpenWRT)
說明 1. 改造 Mercury MW305R v3.0(芯片 9533) 2. OpenWRT 版本:LEDE 17 3. 環境:Ubuntu 16.04 x64 第一步:修改硬件 1. 換 RAN ...
- Mercury MW305R v3.0 路由器改造 LEDE(OpenWRT)
说明 1. 改造 Mercury MW305R v3.0(芯片 9533) 2. OpenWRT 版本:LEDE 17 3. 环境:Ubuntu 16.04 x64 第一步:修改硬件 1. 换 RAN ...
- Micro Framework 3 0模拟器改造
Micro Framework 3.0的SDK去年十月份就已经发布了,本打算在该SDK发布之后就把我以前开发的,可支持GPIO.I2C.SPI测试的模拟器同步升级为3.0版,以便早点支持VS2008( ...
- yii mysql 查询 类型转换_Yii2.0 API改造(返回数据库对应字段数据类型)
namespace common\ext;useYii;useyii\base\InvalidConfigException;useyii\base\NotSupportedException;use ...
- WorkFlow设计篇Step.2—传参的用法-订单金额的处理(续)-WF4.0
开篇 上一篇,我们开始讲述WF4.0中的设计篇的开始,本系列主要讲述如何结合业务来设计工作流处理流程,并说明如何使用工作流流程来设计完成具体的业务流程处 理过程,将原来的代码处理业务流程,修改成WF可 ...
最新文章
- python如何读入dat数据_python二进制dat数据怎么转成txt文本
- hdu 3812 Sea Sky 深搜+剪枝
- javaScript面向对象编程学习(二)
- nssl1216-码灵鼠【数学】
- jQuery Ajax
- Chapter7-12_Controllable Chatbot
- python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
- ifconfig route 手动设置网卡route路由 示例
- vue 页面不置顶问题(页面内操作、页面跳转后) - 集合篇
- 条件语句和循环语句_总结一下条件语句和循环语句
- 是真的!华为2019年应届博士年薪最高达201万
- 6.Prometheus 监控技术与实践 --- 告警处理
- 移动应用android简单播放器,打造移动掌上影院 Android播放器横评
- MATLAB图像滤波去噪分析及其应用
- 手机mtkcdc端口如何开启_MTK驱动安装教程(手机黑屏刷机)
- js延时函数--setTimeout
- 博科FC光纤交换机详细配置教程
- 2007年个人站长/SEOer必上网站
- 汉诺塔的非递归实现(借助堆栈模拟递归)
- 巴比特 | 元宇宙每日必读:未成年人打赏后要求退款,虚拟主播称自己是大冤种,怎么看待这个监管漏洞?...
热门文章
- JAVA如何代码静态检查术语_Sonar代码静态检查规则-JAVA篇(二)
- Exynos4412启动过程分析
- Mac OS X下查看CPU信息
- 删除(.svn)目录
- [react] 说说react的生命周期有哪些?
- [react] react组件的state和props两者有什么区别?
- [html] 举例说明实现文字贯穿线的方法有哪些?
- [软技能] 你认为计算专业和非计算机专业的差别在哪?为什么?
- [html] 要减少DOM的数量有什么办法吗?
- [vue] 在组件中怎么访问到根实例?