Что происходит, когда я вызываю 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);
}