Automapper - 多次调用CreateMap

Eup*_*ric 12 automapper

当我多次调用相同类型的Mapper.CreateMap时会发生什么?

它会改写以前的地图吗?如果是这样,如果我尝试创建已创建的地图,是否可以使其抛出异常?

Art*_*r P 23

当多次为同一组源和目标调用Mapper.CreateMap时,根本不会发生任何事情,因为Mapper.CreateMap<TSource, TDestination>()它没有为映射配置设置任何扩展.如果为此设置IMappingExpression的覆盖,则为 Mapper.CreateMap<TSource, TDestination>().ConstructUsing(x=>new TDestination(x.SomeField))yes,此映射的配置将替换为新映射.关于问题的第二部分,我知道验证地图是否已经创建的方法:

public TDestination Resolve<TSource, TDestination>(TSource source)
{
     var mapped = Mapper.FindTypeMapFor(typeof(TSource), typeof(TDestination)); //this will give you a reference to existing mapping if it was created or NULL if not

     if (mapped == null)
     {
        var expression = Mapper.CreateMap<TSource, TDestination>();
     }
     return Mapper.Map<TSource, TDestination>(source);
}
Run Code Online (Sandbox Code Playgroud)

  • 是否有任何开销一次又一次地调用它?让我们说它是否在类的构造函数中? (6认同)
  • 响应很晚,但是为了其他人阅读的好处,是的!我正在盯着一个性能报告,其中60%的CPU时间用于调用Mapper.CreateMap(带有上述答案的扩展) (2认同)