1

也许这是一个愚蠢的问题,但对我来说真的不明显:(

var address = new Address { Id = 1, Name = "John Doe" };

// Configure AutoMapper
Mapper.CreateMap<Address, AddressViewModel>();

// Perform mapping
var viewModel = Mapper.Map<Address, AddressViewModel>(address);

不需要恕我直言Mapper.CreateMap<Address, AddressViewModel>();,因为 AutoMapper 会在执行映射之后获取此信息。

那么为什么我必须编写这些配置呢?

4

3 回答 3

5

快速浏览 source后,它似乎将其映射存储在引擎中,以便随后的任何调用都从引擎加载映射数据。

这可能是因为反射可能很昂贵,并且 AutoMapper 无法知道有人会使用 Mapper.Map 的次数。定义:缓存:)

于 2012-08-01T22:14:16.757 回答
2

此外,此模式对于验证您的配置是否正确非常有用(请参阅https://github.com/AutoMapper/AutoMapper/wiki/Configuration-validation)。一些映射需要相当具体的配置,这可以及早发现任何错误。

于 2012-08-02T07:51:09.817 回答
2

如果没有别的,Automapper 在执行映射时不一定会获得所有这些信息,因为您可能在 CreateMap 表达式中指定了任意数量的 .ForMember / .AfterMap (etc) 链接。您不想在每次映射调用中重复所有这些。

于 2012-08-02T10:14:32.337 回答