封装一个Automapper单例
Posted 没有热枕,世间便无进步.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装一个Automapper单例相关的知识,希望对你有一定的参考价值。
public class DataModule : IModule { public void Configure(IMapperConfigurationExpression cfg) { //cfg.CreateMap<ApproveAtcPo, ApproveAtcVo>().ReverseMap(); } }
/// <summary> /// 注册需要转换的类型 /// </summary> private PoMapper() { AutoMapper.Mapper.Initialize(cfg => {
//多模块注册方式 new DataModule().Configure(cfg); new AliasModule().Configure(cfg); }); }
1 public class MapperTool 2 { 3 private static volatile MapperTool mapper = null; 4 private static object syncRoot = new Object(); 5 public static readonly List<Type> typeList = null; 6 /// <summary> 7 /// 注册需要转换的类型 8 /// </summary> 9 private MapperTool() 10 { 11 Mapper.Initialize(cfg => 12 { 13 //指定不同属性映射demo 14 //cfg.CreateMap<auth_userVo, t_auth_user>() 15 // .ReverseMap() 16 // .ForMember(dest => dest.id, opt => opt.MapFrom(src => src.rid)) 17 // .ForMember(dest => dest.update, opt => opt.MapFrom(src => src.create)); 18 19 }); 20 //验证是否所有字段都转换了 21 //Mapper.Configuration.AssertConfigurationIsValid(); 22 } 23 24 private MapperTool(List<Type[]> TypeList) 25 { 26 Mapper.Initialize(cfg => 27 { 28 foreach (var type in TypeList) 29 { 30 cfg.CreateMap(type[0], type[1]).ReverseMap(); 31 } 32 }); 33 } 34 35 36 /// <summary> 37 /// 初始化注册Mapper 38 /// </summary> 39 public static MapperTool Instance 40 { 41 get 42 { 43 if (mapper == null) 44 { 45 lock (syncRoot) 46 { 47 if (mapper == null) 48 { 49 mapper = new MapperTool(); 50 } 51 52 } 53 } 54 return mapper; 55 } 56 } 57 58 /// <summary> 59 /// 传入需要转换的对象 60 /// </summary> 61 /// <typeparam name="F">需要转换的对象类型</typeparam> 62 /// <typeparam name="T">转换目标对象类型</typeparam> 63 /// <param name="f">需要转换的对象</param> 64 /// <returns>目标对象</returns> 65 public T Map<F, T>(F f) 66 where F : new() 67 where T : new() 68 { 69 return Mapper.Map<F, T>(f); 70 } 71 }
以上是关于封装一个Automapper单例的主要内容,如果未能解决你的问题,请参考以下文章