AutoMapper实现自动CreapMap
标题是个噱头,完全不写代码自动是不现实的,只是简化了CreateMap。方法也是很粗糙的,看看吧。
我想在使用AutoMapper的时候最恶心的一定是写了一个Profile,里边有n行 Mapper.CreateMap<T1, T2>(),也可能是我没有用对?求指教啊~!
解决思路
CreateMap得分两类,80%只是纯创建CreateMap。20%是带自定义映射的。自定义 映射我觉得没必要省了,省个80%也足够了
既然要在初始化的时候解决掉这80%,那么如何加载这些类?如何识别TSource TDestination呢?
显然配置不能少啊,无论如何TSource/TDestination跑不掉,那么干脆写到TSource上去吧?用什么呢?Attribute?Interface?显然Interface更好处理一些。Attribute看起来会蛋疼一些。
那么不妨来个接口定义:
public interface IMapperTo<TDestination>{}
然后同样来个Profile集中处理这些interface
typeof(SaveBuyerDemandRequest).Assembly.GetTypes()//①
.Where(i => i.GetInterfaces().Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IMapperTo<>)))
.ToList().ForEach(item =>
{
item.GetInterfaces()
.Where(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IMapperTo<>))
.ToList()//②
.ForEach(i => {
var t2 = i.GetGenericArguments()[0];
Mapper.CreateMap(item, t2);
Mapper.CreateMap(t2, item);
});
});
①:SaveBuyerDemandRequest
是TSource同属的Assembly底下的任意类,要包含多个Aeembly的话自己扩展咯
②这里可以支持多个IMapperTo
所有代码都放在了Gist上了,戳这里代码
AutoMapper实现自动CreapMap的更多相关文章
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- [AutoMapper]反射自动注册AutoMapper Profile
AutoMapper 帮我我们方便管理物件跟物件之间属性值格式转换 模型转换 这里有两个类别 UserInfoModel 当作我们从DB捞取出来模型资料 public class UserInfoMo ...
- Automapper实现自动映射
出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要 ...
- Automapper 实现自动映射
出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要 ...
- 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper
剧情开始 为何相爱? 相处的问题? 女人的伟大? 剧情收尾? 有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(中)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- AutoMapper搬运工之自定义映射
回顾 上节说到了AutoMapper的简单使用,对于复杂的Mapping需要强大的自定义,这节我们来看下AutoMapper的自定义Mapping(Projection) 搬运自Git:https:/ ...
随机推荐
- web主题公园版权信息破解:script.js加密文件
很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园) ...
- Java虚拟机及运行时数据区
1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...
- Java学习笔记-Math类
并非所有的类都需要main方法.Math类和JOptionPane类都没有main方法.这些类中所包含的方法主要是为了供其他类使用. package welcome; public class Tes ...
- gevent
gevent是一个基于协程的python网络库. 特性: 1.基于libev的事件循环 2.基于greenlet 轻量级的执行单元 (what is greenlet ?) 3.来自python标准 ...
- jquery 杂记
返回指定属性名的属性值:getAttribute() 设置元素的属性值:attr('src',voiceurl) form表单: 序列化表单值: $('#formid').serialize() ...
- 商业智能BI
参考资料: 7 款顶级开源 BI(商务智能)软件和报表工具
- 用R做逻辑回归之汽车贷款违约模型
数据说明 本数据是一份汽车贷款违约数据 application_id 申请者ID account_number 账户号 bad_ind 是否违约 vehicle_year ...
- mysql 优化
1.存储过程造数据 CREATE DEFINER=`root`@`localhost` PROCEDURE `generate_test_data`(`n` int) begin declare i ...
- 配置 PHP 的 Session 存储到 Redis
PHP 的会话默认是以文件的形式存在的,可以配置到 NoSQL 中,即提高了访问速度,又能很好地实现会话共享,,,爽歪歪! 配置方式如下: 方法一:修改 php.ini 的设置 session.sav ...
- css3渐变
background:-webkit-linear-gradient | radial-gradient (水平起点 垂直起点 , 颜色1 百分比%, 颜色2 百分比%, ... ,颜色N 100 ...