AutoMapper 是什么?
AutoMapper是一个对象到对象的映射关系,对象到对象的映射是通过转化一个类型对象输入到一个不同的类型对象输出来工作的,使得AutoMapper让人感兴趣的一点就是他提供了一些比较有趣的规则把繁重的工作从类型对象转换算法中剔除掉,
只要类型对象遵循了AutoMapper建立的规则,基本上不需要额外的配置去做类型对象之间的转化。
为什么要用AutoMapper?
类型转换代码是令人讨厌的,测试类型转换代码更加的令人讨厌,AutoMapper提供了非常简单的配置机制,类型转换测试也变得同样简单,现在真正剩下的需要关心的问题是why use object-object mapping?,
类型转化会发生在项目中很多地方,但是大部分发生在层与层之间的边界,例如 UI/Domain 之间,或者Service/Domain 之间,通常来说一层关心的东西和另外一层关心的东西是不一致的,
所以对象到对象的映射产生了一个隔离的模型,这样每一层的对象的变化更加独立,仅仅会影响对象所在的层,对其他的层不会产生影响
如何使用AutoMapper?
首先,你需要Source类型和目标类型,这个目标类型在设计之初就会受到其所在层的影响,但是AutoMappers依然可以工作的很好,只要目标对象成员名称和源对象成员名称匹配,例如你有一个源对象属性叫FirstName,
那么他将会自动映射 到目标对象成员名称叫FirstName的属性,AutoMapper也支持Flattening。
当映射源类型到目标类型时,AutoMapper会忽略空引用异常,这是默认的设计,如果你不喜欢这种设计,你可以结合AutoMapper Custom-value-resolver,如果需要的话。
一旦你有了两个类型,而且引用了AutoMapper,你就可以给这两个类型添加映射,
Mapper.CreateMap<Order, OrderDto>();
左边的类型是源类型,右边的类型是目标类型,用下面的方法去执行一个映射
OrderDto dto = Mapper.Map<OrderDto>(order);
AutoMapper也有非泛型的方法。
在什么地方配置AutoMapper?
如果你使用静态的映射方法,配置时只需要在appDomain中配置一次,这意味着你最好的选择就是把配置代码方法在程序启动项中,例如Global.asax。需要说明的是,在bootstrapper(启动加载器)内配置自己,
这个bootstrapper也被称作为启动方法。
如何测试my mappings?
创建一个映射测试,你要做两件事
就像下面这个例子一样:
AutoMapperConfiguration.Configure();
Mapper.AssertConfigurationIsValid();
https://github.com/AutoMapper/AutoMapper/wiki/Getting-started