jk's notes
  • 入门指南

入门指南

AutoMapper 是什么?

它是对象-对象的管理库. 通过将某个类型对象转换为另一个不同的类型对象. AutoMapper 使得枯燥的转换变得简单高效. 大部分转换都按照约定完成, 几乎是零配置的.

为什么使用 AutoMapper?

实际上该问题可以看成为什么需要类型转换.

  • 类型转换很枯燥, 测试转换代码也很枯燥.

  • 类型转换很普遍, 多半出现在两个层之间进行数据交换时. 在不同层内使用自有数据模型有助于隔离, 也提升每一层的独立性, 提升开发效率 (好比自己人好办事一样).

如何使用 AutoMapper?

首先需要有 源类型 (source), 和 目标类型 (destination). 目标类型的结构与其层有一定关系, 但只要存在同名的属性, AutoMapper 就可以很好的工作. 例如, 如果源类型中含有属性 FirstName, 该属性就会自动的映射到目标类型中名为 FirstName 的属性上. AutoMapper 还支持扁平化.

在从源类型映射到目标类型时, AutoMapper 会自动忽略非空引用异常. 这是设计好的. 如果你不希望该方法, 如果需要你可以自定义转换办法.

一旦你有了类型, 你有两个方法来创建映射. 使用 MapperConfiguration 或 CreateMap. 在每一个应用程序域中只需要一个 MapperConfiguration 实例. 并且在程序启动的时候被实例化. 可以参考示例.

var config = new MapperConfiguration(ctg => {
  cfg.CreateMap<Order, OrderDto>();
});

左边的类型为源类型, 右边的类型是目标类型. 执行映射, 调用 Map 重载方法:

var mapper = config.CreateMapper();
// 或
var mapper = new Mapper(config);

OrderDto dto = mapper.Get<OrderDto>(order);

大多数应用程序可以使用依赖注入系统来注入 IMapper 实例.

AutoMapper 还提供了非泛型版本的方法, 应对在编译过程中无法确定类型的情况.

在哪里配置 AutoMapper?

在一个程序集中只需要配置一次, 也就是说配置放在 Startup 中即可:

  • ASP.NET 应用程序, 可以放在 Global.asax 文件中.
  • ASP.NET Core 中有对应的扩展方法来支持.

应该如何测试映射?

测试需要完成两件事:

  • 调用启动类来创建所有的映射
  • 调用 MapperConfiguration.AssertConfigurationIsValid

例如:

var config = AutoMapperConfiguration.Configure();
config.AssertConfigurationIsValid();

理解映射

AutoMapper 会为映射创建一个执行计划. 在调试中, 可以通过一个表达式树来查看这个执行计划. 你可以通过安装 VS 扩展: ReadableExpressions来更好的查看结果. 如果希望脱离 VS 来查件, 可以直接安装 ReadableExpressions 包. 这里还有一个 DotNetFiddle, 它是一个使用了该 Nuget 包的可参考案例. 链接中的文章也描述了 VS 扩展的使用.

文档链接: https://docs.automapper.org/en/latest/Understanding-your-mapping.html

这是一个对其底层描述的内容.

The MyGet Build

介绍自定义构建, 从源码构建的办法. 略.

文档链接: https://docs.automapper.org/en/latest/The-MyGet-build.html

Last Updated:
Contributors: jk