При вызове 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);
}