Automapper – 为什么要使用Mapper.Initialize?

我通常不会在这里问这样的问题,但不幸的是,虽然AutoMapper似乎是一个很好的映射库,但它的文档非常糟糕 – 库的方法没有XML文档,我找到的官方在线文档最多是这样 ,非常活跃。 如果有人有更好的文档,请告诉我。

也就是说,这就是问题:为什么要使用Mapper.Initialize ? 它似乎没有必要,因为你可以立即使用Mapper.CreateMap ,因为没有文档我不知道Initialize的意图。

我在AutoMapper用户列表中询问过,这个答案基本上说明了原因:

https://groups.google.com/forum/?fromgroups=#!topic/automapper-users/0RgIjrKi28U

这与允许AutoMapper进行确定性(随机)优化有关。 在性能方面,最好在Initialize调用中创建所有映射。

初始化运行所有地图创建一次,然后在您进行映射时完成。 您可以随时创建地图,但这会降低代码速度,因为映射创建涉及reflection。

我发现最好使用配置文件作为我的映射代码,并使用以下内容来完成所有设置:

 public class AutoMapperConfiguration : IRequiresConfigurationOnStartUp { private readonly IContainer _container; public AutoMapperConfiguration(IContainer container) { _container = container; } public void Configure() { Mapper.Initialize(x => GetAutoMapperConfiguration(Mapper.Configuration)); } private void GetAutoMapperConfiguration(IConfiguration configuration) { var profiles = GetProfiles(); foreach (var profile in profiles) { configuration.AddProfile(_container.GetInstance(profile) as Profile); } } private static IEnumerable GetProfiles() { return typeof(AutoMapperConfiguration).Assembly.GetTypes() .Where(type => !type.IsAbstract && typeof(Profile).IsAssignableFrom(type)); } }