Ответ 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);
}