1.1入门指南(AutoMapper官方文档翻译)

AutoMapper是一个自动化的对象映射库,通过约定自动将一种类型映射到另一种,减少编码和测试的复杂性。它常用于层间通信,如UI与领域层或服务与领域层。配置应在应用启动时进行,且支持测试验证映射的正确性。
摘要由CSDN通过智能技术生成

官方文档原文链接

什么是AutoMapper?

AutoMapper是一个对象-对象映射器。对象-对象映射的工作原理是将一种类型的输入对象转换为不同类型的输出对象。AutoMapper的有趣之处在于,它提供了一些有趣的约定,将如何将类型A映射到类型B的繁琐工作解决掉。只要类型B遵循AutoMapper的既定约定,映射两个类型几乎不需要任何配置。

为什么要使用AutoMapper?

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

如何使用AutoMapper?

首先,您需要同时使用源和目标类型。目标类型的设计可能会受到其所在层的影响,但是只要成员的名称与源类型的成员匹配,AutoMapper就能工作得最好。如果您有一个名为“FirstName”的源成员,它将自动映射到名称为“FirstName”的目标成员。AutoMapper还支持扁平化(Flattening)。

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

一旦有了类型,就可以使用 MapperConfigurationCreateMap 为这两种类型创建映射。通常每个AppDomain只需要一个 MapperConfiguration 实例,并且应该在启动期间实例化。可以在 Setup 中看到更多初始设置的示例。

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

左边的类型是源类型,右边的类型是目的类型。要执行映射,调用其中一个Map重载:

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

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

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

在哪里配置AutoMapper?

每个AppDomain只应该配置一次。这意味着配置代码的最佳位置是在应用程序启动时,例如用于ASP.NET应用程序的 Global.asax 文件。通常,配置引导程序(bootstrapper)类在它自己的类中,并且这个引导程序类是从startup方法调用的。引导程序类应该构造一个 MapperConfiguration 对象来配置类型映射。

对于ASP.NET Core,依赖注入(Dependency Injection)文章展示了如何在应用程序中配置AutoMapper。

如何测试映射?

要测试映射,你需要创建一个做两件事的测试:

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

例如:

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

译者代码实现

github仓库地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值