AutoMapper用法

什麼是AutoMapper?


在多層結構中,經常用到對象到對象的轉化,手工去寫複製太過麻煩。而AutoMapper就是一個可以實現自動轉換的類庫。 它提供了一些有趣的約定,從而弄清楚如何將類型A映射到類型B.只要類型B遵循AutoMapper建立的約定,映射兩種類型幾乎就是零配置。

 

怎麼使用Automapper

使用Nuget 直接引用AutoMapper就可以使用AutoMapper了。

 

添加MapperTool類

private static volatile MapperTool mapper = null;
        private static object syncRoot = new Object();
        public static readonly List<Type> typeList = null;
        /// <summary>
        /// 註冊需要轉換的類型
        /// </summary>
        private MapperTool()
        {
            Mapper.Initialize(cfg =>
            {
                //指定不同屬性映射demo
                //cfg.CreateMap<auth_userVo, t_auth_user>()
                //   .ReverseMap()
                //   .ForMember(dest => dest.id, opt => opt.MapFrom(src => src.rid))
                //   .ForMember(dest => dest.update, opt => opt.MapFrom(src => src.create));
                cfg.CreateMap<t_auth_rules, auth_rulesDto>().ReverseMap();
                cfg.CreateMap<UserListPo, UserListVo>()
                 .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.City + src.Address)).ReverseMap();
//設置反向映射
ReverseMap()
               //字段類型不太一致的,但是有規律的 完全可以自動實現轉化 不需要在這裏設置(如果是list數組必須創建CreateMap)
//類型不一致,名稱不符合約定的就需要使用MapFrom 來指定 也可以再內部加入簡單的邏輯運算 如兩個字段值合併成新的字段ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.City + src.Address))) })
//驗證是否所有字段都轉換了 //Mapper.Configuration.AssertConfigurationIsValid(); }

private MapperTool(List<Type[]> TypeList) { Mapper.Initialize(cfg => { foreach (var type in TypeList) { cfg.CreateMap(type[0], type[1]).ReverseMap();}
}); 
}

/// <summary>
/// 初始化註冊Mapper
/// </summary>
public static MapperTool Instance { get { if (mapper == null) { lock (syncRoot) { if (mapper == null) { mapper = new MapperTool(); } } } return mapper; } }

/// <summary>
/// 傳入需要轉換的對象
/// </summary>
/// <typeparam name="F">需要轉換的對象類型</typeparam>
/// <typeparam name="T">轉換目標對象類型</typeparam>
/// <param name="f">需要轉換的對象</param>
/// <returns>目標對象</returns>
public T Map<F, T>(F f) where F : new() where T : new() { return Mapper.Map<F, T>(f); }

 

調用

   對象互轉:

       UserListVo uv=    MapperTool.Instance.Map<UserListPo, UserListVo>(new UserListPo())

  集合互轉:

          List<UserListVo> uvs=   MapperTool.Instance.Map<List<UserListPo>, List<UserListVo>>(new List<UserListPo>())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章