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看起来会蛋疼一些。
那么不妨来个接口定义:
1 | public interface IMapperTo<TDestination>{} |
然后同样来个Profile集中处理这些interface
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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上了,戳这里代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?