Automapper - 为什么要用Mapper.Initialize?(Automapper -

2019-08-01 15:48发布

通常我不会问这样的问题就在这里,但不幸的是,同时AutoMapper似乎是一个很好的映射库,其文档是远远糟糕-没有为库的方法没有XML文档,最官方的在线文档,我能找到就是这个 ,这是非常活跃。 如果任何人有任何更好的文档,请让我知道。

这就是说,这里的问题:为什么要用Mapper.Initialize ? 它似乎并不需要,你可以只使用Mapper.CreateMap立即,并因为没有文件我不知道该怎么Initialize的意思做。

Answer 1:

我问AutoMapper用户列表中,并且这个答案基本上是说了原因:

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

这件事情做允许AutoMapper做确定性(随机)优化。 性能方面,这是更好地得到在创建了所有的映射Initialize呼叫。



Answer 2:

初始化运行所有地图生成一次,所以当你来干什么你的映射是那么做。 您可以创建一个地图,只要你想要的,但作为映射创造包括反射,这将减缓你的代码了。

我觉得最好使用配置文件我映射代码,并使用类似以下内容来得到这一切的设置:

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));
    }
}


文章来源: Automapper - why use Mapper.Initialize?
标签: c# AutoMapper