對象映射工具Mapper


對象Mapper工具備好幾種,好比:AutoMapper、EmitMapper、ValueInjecter,通過比較比較推薦ValueInjecter。


1.AutoMapper

屬性的命名要按照PascalCase命名規則

不一樣類型的轉換會報異常AutoMapperMappingException,-----解決方法(AutoMapper提供了自定義類型轉換器)

ConvertUsing是什麼?它是咱們在指定類型映射時,類型配置的方法,就是說經過ConvertUsing方法把類型映射中類型轉換的權限交給用戶配置,而不是經過AutoMapper進行自動類型轉換,這就給我提供了更多的自定義性,也就避免了不一樣類型之間轉換而引發的」AutoMapperMappingException「異常app

public void Example() { var source = new Source { Value1 = "5", Value2 = "01/01/2000", Value3 = "DTO_AutoMapper使用詳解.GlobalTypeConverters+Destination" }; // 配置 AutoMapper
            Mapper.CreateMap<string, int>().ConvertUsing(Convert.ToInt32); Mapper.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter()); Mapper.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>(); Mapper.CreateMap<Source, Destination>(); Mapper.AssertConfigurationIsValid(); // 執行 mapping
            Destination result = Mapper.Map<Source, Destination>(source); Console.WriteLine("result.Value1:" + result.Value1.ToString()); Console.WriteLine("result.Value2:" + result.Value2.ToString()); Console.WriteLine("result.Value3:" + result.Value3.ToString()); } Mapper.CreateMap<Source, Destination>() .ForMember(dest => dest.Total, opt => opt.MapFrom(src => src.Value1 + src.Value2));


2.EmitMapper------http://emitmapper.codeplex.com/

EmitMapper映射效率比較高,接近硬編碼。EmitMapper採用emit方式在運行時動態生成IL,而其餘映射框架可能是採用反射機制。此外EmitMapper最大限度地減小了拆箱裝箱操做和映射過程當中的額外的調用
EmitMapper的使用很是簡單,不須要指定任何的映射策略。系統會採用默認的映射配置器DefaultMapConfig完成映射操做



3.ValueInjecter-------https://valueinjecter.codeplex.com/



框架

相關文章
相關標籤/搜索