转载:https://cloud.tencent.com/developer/article/1344642
EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/。
EmitMapper映射效率比较高,接近硬编码。EmitMapper采用emit方式在运行时动态生成IL,而其他映射框架多是采用反射机制。此外EmitMapper最大限度地减少了拆箱装箱操作和映射过程中的额外的调用。
EmitMapper支持.net的所有平台:Framework 3.5、Microsoft Silverlight 3、Mono。
EmitMapper的使用非常简单,不需要指定任何的映射策略。系统会采用默认的映射配置器DefaultMapConfig完成映射操作。
//=>一、(默认映射配置器)属性名称一样的情况;类型可以不一样,但基元素类型转换可以进行ToString。(注意是属性名称是区分大小写)
//=》写法一
//ObjectsMapper<Sourse, Dest> mapper =
//ObjectMapperManager.DefaultInstance.GetMapper<Sourse, Dest>();
//Dest dst = mapper.Map(src);
//=》简写二
Dest dst = null;
dst = ObjectMapperManager.DefaultInstance.GetMapper<Sourse, Dest>().Map(src, dst);
//=》二、自定义映射配置器
ObjectsMapper<Sourse, Dest> mapper1 =
new ObjectMapperManager().GetMapper<Sourse, Dest>
(
new DefaultMapConfig()
.IgnoreMembers<Sourse, Dest>(new string[] { "A" })
.NullSubstitution<decimal?, decimal>((value) => { return -1M; }) //如果不是语句块,则可以省略return;如果是加上return,则需要加上花括号 { return }
//.NullSubstitution<decimal?, decimal>((value) => -1M)
.ConvertUsing<Inner, Inner2>(value => new Inner2 { D12 = value.D1, D22 = value.D2 })
//.ConvertUsing<Inner, Inner2>(value => { return new Inner2 { D12 = value.D1, D22 = value.D2 }; })
//=>方法体的写法
//.PostProcess<Dest>((value, state) =>
//{
// value.F = "nothing";
// value.A = 111;
// return value;
//})
//);
//=>return的写法
//.PostProcess<Dest>((value, state) =>
//{
// return new Dest
// {
// F = "nothing",
// A = 111,
// };
//})
//.PostProcess<Dest>((value, state) =>
// new Dest
// {
// F = "noting",
// A = 111,
// })
//);
.PostProcess<Dest>((Dest value, object state) =>
new Dest
{
F = "noting",
A = 111,
})
);
Dest dst1 = mapper1.Map(src);
//=>其他
//=>委托写法
//EmitMapper.MappingConfiguration.MappingOperations.ValuesPostProcessor<Dest> ValuesPostProcessor1 = delegate(Dest dest1, object state) { return new Dest { }; };
EmitMapper.MappingConfiguration.MappingOperations.ValuesPostProcessor<Dest> ValuesPostProcessor2 = (d, s) => { return new Dest { }; };
EmitMapper的使用小结(很不错)
http://www.cnblogs.com/ariklee/p/3833598.html
自己总结的Demo下载:
http://files.cnblogs.com/files/zfanlong1314/EmitMapperComponent.zip