java 有automapper吗_AutoMapper实现自动CreapMap

标题是个噱头,完全不写代码自动是不现实的,只是简化了CreateMap。方法也是很粗糙的,看看吧。

我想在使用AutoMapper的时候最恶心的一定是写了一个Profile,里边有n行 Mapper.CreateMap(),也可能是我没有用对?求指教啊~!

解决思路

CreateMap得分两类,80%只是纯创建CreateMap。20%是带自定义映射的。自定义 映射我觉得没必要省了,省个80%也足够了

既然要在初始化的时候解决掉这80%,那么如何加载这些类?如何识别TSource TDestination呢?

显然配置不能少啊,无论如何TSource/TDestination跑不掉,那么干脆写到TSource上去吧?用什么呢?Attribute?Interface?显然Interface更好处理一些。Attribute看起来会蛋疼一些。

那么不妨来个接口定义:

public interface IMapperTo{}

然后同样来个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上了,戳这里代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值