入门指南
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