Получить тип назначения от Automapper.Картограф


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

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

Существует ли какой-либо способ, какой-либо метод, который при условии typeof(Models.MyModel) вернет typeof(Entities.MyEntity) ?

2 10

2 ответа:

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

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

[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);
}

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

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

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