AutoMapper实现自动CreapMap
2016-09-14 16:00
399 查看
标题是个噱头,完全不写代码自动是不现实的,只是简化了CreateMap。方法也是很粗糙的,看看吧。
我想在使用AutoMapper的时候最恶心的一定是写了一个Profile,里边有n行 Mapper.CreateMap<T1, T2>(),也可能是我没有用对?求指教啊~!
既然要在初始化的时候解决掉这80%,那么如何加载这些类?如何识别TSource TDestination呢?
显然配置不能少啊,无论如何TSource/TDestination跑不掉,那么干脆写到TSource上去吧?用什么呢?Attribute?Interface?显然Interface更好处理一些。Attribute看起来会蛋疼一些。
那么不妨来个接口定义:
然后同样来个Profile集中处理这些interface
①:
②这里可以支持多个
所有代码都放在了Gist上了,戳这里代码
我想在使用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上了,戳这里代码
相关文章推荐
- DedeCMS定时自动生成站点地图sitemap.xml的实现方法
- 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
- Android MapView 实现双击自动扩大地图
- 安装Ruby、Sass在WebStrom添加Watcher实现编辑scss文件时自动生成.map和压缩后的.css文件
- Automapper 实现自动映射
- 【AutoMapper】实体类间自动实现映射关系,及其转换。
- 利用Java的反射机制实现Bean实体与Map自动转换的工具类
- Automapper实现自动映射
- java的Collection或Map实现元素自动排序
- Automapper实现自动映射
- Automapper实现自动映射的实例代码
- caseinsensitivemap实现大小写不同的Key 合并+TreeMap 实现自动排序
- 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
- Automapper 实现自动映射
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#) skyover [原作]
- WEB环境中后台自动上传文件至数据库的实现
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)
- VB6实现的自动停靠窗体
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)
- access如何用代码在“默认值”里实现自动编号?单据流水号生成问题。