Automapper - CreateMap вызывается несколько раз - PullRequest
12 голосов
/ 15 июня 2011

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

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

1 Ответ

23 голосов
/ 15 июля 2011

При вызове 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...