一、什么是AutoMapper
- AutoMapper的作用是把一个对象转化为另一个对象,避免每次都去转化。
- 使用DTO实现表现层与领域Model的解耦,用AutoMapper来实现DTO与领域Model的相互转换
- 为什么要用DTO?
- DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层
- DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的解耦,因此改动领域Model不会影响UI层
- DTO说白了就是数据而已,不包含任何的业务逻辑,属于瘦身型的对象,使用时可以根据不同的UI需求进行灵活的运用
先创建类,在类中实现映射的方法
使用场景
- 对外服务接口
- UI展现层
- 用户的输入输出
public class Test1 : Profile { public Test1() { //两个类型之间的映射 CreateMap<classA, classB>().ReverseMap(); CreateMap<classC, classD>().ReverseMap(); //映射的对象名称不一样 CreateMap<AddressDto, Address>().ForMember(d => d.Country, opt => opt.MapFrom(s => s.CountryName)); //或者 CreateMap<AddressDto, Address>().ConstructUsing(cp => new Address { CountryName=cp.Country }).ReverseMap(); } } public class Test2 : Profile { public Test2() { CreateMap<classA1, classB1>().ReverseMap(); CreateMap<classC1, classD1>().ReverseMap(); } }
在需要的地方进行映射就OK了
Mapper.Map<classB1>(info);
二、获取AutoMapper所对应的属性
使用场景,当建立好一个对象所以对应的转换对象,然后如何通过一个对象的属性名而获取对应转换对象属性名呢? AutoMapper能够将一个对象转换另一个对象,那么一定是将两者的相关属性匹配存储起来,然后再一一转换即可。即然思是这样的那么通过一个属性名获取对应对象属性名一定是可行呢,那么AutoMapper是有自带这样的方法吗,让你失望了我本没有发现,所以只能自己来扩展了。
public string GetDestinationPropertyFor<TSrc, TDst>(string sourceProperty) { var map =Mapper.ConfigurationProvider.As<IGlobalConfiguration>().FindTypeMapFor<TSrc, TDst>(); var propertyMap = map?.PropertyMaps.FirstOrDefault(pm => pm.SourceMember == typeof(TSrc).GetProperty(sourceProperty)); return propertyMap?.DestinationName ?? String.Empty; }
标签:DTO,对象,CreateMap,AutoMapper,public,属性 From: https://www.cnblogs.com/hnwl0507/p/16886172.html