通常我不会问这样的问题就在这里,但不幸的是,同时AutoMapper似乎是一个很好的映射库,其文档是远远糟糕-没有为库的方法没有XML文档,最官方的在线文档,我能找到就是这个 ,这是非常活跃。 如果任何人有任何更好的文档,请让我知道。
这就是说,这里的问题:为什么要用Mapper.Initialize
? 它似乎并不需要,你可以只使用Mapper.CreateMap
立即,并因为没有文件我不知道该怎么Initialize
的意思做。
通常我不会问这样的问题就在这里,但不幸的是,同时AutoMapper似乎是一个很好的映射库,其文档是远远糟糕-没有为库的方法没有XML文档,最官方的在线文档,我能找到就是这个 ,这是非常活跃。 如果任何人有任何更好的文档,请让我知道。
这就是说,这里的问题:为什么要用Mapper.Initialize
? 它似乎并不需要,你可以只使用Mapper.CreateMap
立即,并因为没有文件我不知道该怎么Initialize
的意思做。
我问AutoMapper用户列表中,并且这个答案基本上是说了原因:
https://groups.google.com/forum/?fromgroups=#!topic/automapper-users/0RgIjrKi28U
这件事情做允许AutoMapper做确定性(随机)优化。 性能方面,这是更好地得到在创建了所有的映射Initialize
呼叫。
初始化运行所有地图生成一次,所以当你来干什么你的映射是那么做。 您可以创建一个地图,只要你想要的,但作为映射创造包括反射,这将减缓你的代码了。
我觉得最好使用配置文件我映射代码,并使用类似以下内容来得到这一切的设置:
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<Type> GetProfiles()
{
return typeof(AutoMapperConfiguration).Assembly.GetTypes()
.Where(type => !type.IsAbstract && typeof(Profile).IsAssignableFrom(type));
}
}