首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Automapper -为什么使用Mapper.Initialize?

Automapper -为什么使用Mapper.Initialize?
EN

Stack Overflow用户
提问于 2012-10-19 23:13:40
回答 2查看 20.7K关注 0票数 17

我通常不会在这里问这样的问题,但不幸的是,虽然AutoMapper似乎是一个很好的映射库,但它的文档非常糟糕-没有关于该库方法的XML文档,而且我能找到的最官方的在线文档是this,它非常活跃。如果有人有更好的文档,请让我知道。

也就是说,这里有一个问题:为什么要使用Mapper.Initialize?它似乎不是必需的,因为你可以立即使用Mapper.CreateMap,而且由于没有文档,我不知道Initialize是做什么的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-22 22:23:19

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

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

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

票数 9
EN

Stack Overflow用户

发布于 2012-10-19 23:34:20

初始化只运行一次所有的映射创建,因此当您进行映射时,它就完成了。您可以随时创建一个map,但这会减慢您的代码,因为映射创建涉及到反射。

我发现最好对我的映射代码使用配置文件,并使用类似下面的代码来完成所有设置:

代码语言:javascript
复制
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));
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12977273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档