Automapper - CreateMap называется несколько раз

Что происходит, когда я вызываю Mapper.CreateMap с одинаковыми типами несколько раз?

Переписывает ли предыдущая карта? Если да, возможно ли это сделать исключение, если я пытаюсь создать карту, которая уже создана?

Ответ 1

При вызове Mapper.CreateMap для одного и того же набора источника и получателя несколько раз ничего не произойдет, поскольку Mapper.CreateMap<TSource, TDestination>() не настроит никаких расширений для конфигурации сопоставления. Если вы установите переопределения для IMappingExpression, как это Mapper.CreateMap<TSource, TDestination>().ConstructUsing(x=>new TDestination(x.SomeField)) чем да, конфигурация для этого сопоставления будет заменена новой. Что касается второй части вашего вопроса, я знаю, как проверить, была ли карта уже создана:

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