AutoMapper用法

什么是AutoMapper?数组


在多层结构中,常常用到对象到对象的转化,手工去写复制太过麻烦。而AutoMapper就是一个能够实现自动转换的类库。 它提供了一些有趣的约定,从而弄清楚如何将类型A映射到类型B.只要类型B遵循AutoMapper创建的约定,映射两种类型几乎就是零配置。

app

 

怎么使用Automapper

使用Nuget 直接引用AutoMapper就能够使用AutoMapper了。spa

 

添加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); }

 

调用

   对象互转:code

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

  集合互转:blog

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

相关文章
相关标签/搜索