Как я могу использовать Automapper для сопоставить объект с неизвестным типом назначения?

Рассмотрим следующий сценарий. У меня есть несколько классов, которые имеют общий базовый класс, и я определил отображение автомата для каждого производного класса. Примерно так:

class A : Base {}

class B : Base {}

class ContractA : ContractBase {}

class ContractB : ContractBase {}

void Foo()
{
    Mapper.CreateMap<A, ContractA>();
    Mapper.CreateMap<B, ContractB>();
}

Пока все хорошо. Но теперь я хочу создать такой метод:

ContractBase Foo()
{
    Base obj = GetObject();

    return Mapper.???
}

Проблема в том, что все варианты AutoMapper Map требуют, чтобы я либо знал тип назначения во время компиляции, либо имел объект этого типа, доступный во время выполнения. Это серьезно расстраивает, поскольку я определил только одну карту для каждого типа источника. AutoMapper должен иметь возможность определять тип назначения, учитывая только тип источника.

Есть ли какой-нибудь хороший способ обойти это? Я хочу избежать создания словаря, отображающего исходные типы для целевых типов. Хотя это сработает, это будет означать, что мне, по сути, придется определять два сопоставления для каждого типа источника.

6
задан Peter Ruderman 5 October 2010 в 18:06
поделиться