Получить тип назначения из Automapper.Mapper

Я использовал Automapper уже некоторое время, и он работает очень аккуратно. У меня есть следующее отображение:

Mapper.CreateMap<Models.MyModel,Entities.MyEntity>();

Есть ли способ, любой метод, который при условии, что typeof(Models.MyModel) вернет typeof(Entities.MyEntity)?

Ответ 1

Вы можете получить все зарегистрированные TypeMap (тип Automapper для хранения пар типа источника-получателя и другую относящуюся к сопоставлению информацию) с помощью метода Mapper.GetAllTypeMaps().

Используя типовые типы, вы можете найти тип источника:

[Test]
public void Test()
{
    Mapper.CreateMap<Models.MyModel, Entities.MyEntity>();
    var destination = Mapper.GetAllTypeMaps()
                            .First(t => t.SourceType == typeof(Models.MyModel));
    Assert.AreEqual(typeof (Entities.MyEntity), destination.DestinationType);
}

Ответ 2

Другое решение, которое немного чище, чем принятый ответ, заключается в использовании функции ResolveTypeMap для AutoMapper:

var typeMap = Mapper.Configuration.ResolveTypemap(
   typeof(Models.MyModel),    //source type
   typeof(Entities.MyEntity)  //destination type
);
var destinationType = typeMap.DestinationType;

Кроме того, вы можете передать базовый тип как тип назначения (здесь Entities.MyEntity), а automapper вернет производный тип.