AutoMapper 入门指南

910 阅读3分钟

博主声明:本文章为翻译文章,原文地址(点我进入) 翻译时间:20181220

AutoMapper 入门指南

入门指南

什么是AutoMapper?

AutoMapper是一个对象 - 对象映射器。对象 - 对象映射的工作原理是将一种类型的输入对象转换为另一种类型的输出对象。是什么让AutoMapper感兴趣的是它提供了一些有趣的约定来解决如何将类型A映射到类型B的问题。只要类型B遵循AutoMapper的既定约定,几乎零配置就需要映射两种类型。

为什么要使用AutoMapper?

映射代码很无聊。测试映射代码更加无聊。AutoMapper提供简单的类型配置,以及简单的映射测试。真正的问题可能是“为什么要使用对象 - 对象映射?”映射可以在应用程序的许多地方发生,但主要在层之间的边界中,例如UI /域层或服务/域层之间。对一个层的关注经常与另一个层的关注冲突,因此对象 - 对象映射导致隔离模型,其中每个层的关注点只能影响该层中的类型。

我如何使用AutoMapper?

首先,您需要使用源和目标类型。目标类型的设计可能受其所在层的影响,但只要成员的名称与源类型的成员匹配,AutoMapper的效果最佳。如果您有一个名为“FirstName”的源成员,则会自动将其映射到名为“FirstName”的目标成员。AutoMapper还支持Flattening

将源映射到目标时,AutoMapper将忽略空引用异常。这是设计的。如果您不喜欢这种方法,可以根据需要将AutoMapper的方法与自定义值解析器结合使用。

获得类型后,可以使用MapperConfiguration静态Mapper Instance和CreateMap 为这两种类型创建一个map 。MapperConfiguration每个AppDomain通常只需要一个实例,并且应该在启动期间进行实例化。或者,您可以使用Mapper.Initialize(初始设置的更多示例请参见Static-and-Instance-API

Mapper.Initialize(cfg => cfg.CreateMap<Order, OrderDto>());
//or
var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());

左侧的类型是源类型,右侧的类型是目标类型。要执行映射,请使用静态或实例Mapper方法,具体取决于静态或实例初始化

var mapper = config.CreateMapper();
// or
var mapper = new Mapper(config);
OrderDto dto = mapper.Map<OrderDto>(order);
// or
OrderDto dto = Mapper.Map<OrderDto>(order);

大多数应用程序可以使用依赖注入来注入创建的IMapper实例。

对于那些在编译时可能不知道类型的情况,AutoMapper还具有这些方法的非泛型版本。

我在哪里配置AutoMapper?

如果您使用静态Mapper方法,则每个AppDomain只应进行一次配置。这意味着放置配置代码的最佳位置是应用程序启动,例如ASP.NET应用程序的Global.asax文件。通常,配置引导程序类在其自己的类中,并且从启动方法调用此引导程序类。引导程序类应调用Mapper.Initialize来配置类型映射。

我如何测试我的映射?

要测试映射,您需要创建一个执行以下两项操作的测试:

  • 调用bootstrapper类来创建所有映射
  • 调用MapperConfiguration.AssertConfigurationIsValid

这是一个例子:

var config = AutoMapperConfiguration.Configure();

config.AssertConfigurationIsValid();