У меня есть служба WCF, которая использует дженерики в своем контракте данных, например (упрощенно):
public GetDetails(StatusField<string> status);
Теперь WCF поддерживает дженерики, создавая неуниверсальный эквивалентный тип для каждого возможного значения T в дженерике. Итак, для приведенного выше примера клиент, использующий службу WCF, увидит следующую подпись для вышеуказанной функции:
public GetDetails(stringStatusField status);
//...
Теперь у клиента есть копия общей версии класса StatusField. Мы хотим использовать AutoMapper в клиенте, чтобы отобразить между этим универсальным StatusField и типами, сгенерированными выше WCF (такими как stringStatusField), чтобы мы могли вызвать сервис. Мы могли бы сделать это, вручную создавая карты при запуске клиента, например:
Mapper.CreateMap<StatusField<string>, stringStatusField>();
Однако это трудоемко, поскольку существует более 50 возможных значений, которые WCF преобразовал. Расширяя эту идею, мы могли бы использовать отражение, чтобы автоматически создавать карты для всех типов, и это решение, которое мы используем в настоящее время.
В идеале я хотел бы увидеть решение, которое связано с архитектурой AutoMapper, чтобы избежать необходимости делать отражение вручную. концептуально, это потребует некоторого способа определения соглашения , которое AutoMapper будет использовать, чтобы позволить ему связать два типа вместе, подобно тому, как это позволяет указывать пользовательские соглашения при сопоставлении свойств. Пока я не видел способа сделать это, и на этот вопрос я бы хотел ответить здесь, если кто-нибудь знает, как это можно сделать, особенно в связи с вышеописанным сценарием.
Кстати, я знаю, что некоторые могут думать о Mapper.DynamicMap () как о решении этой проблемы. Во-первых, мы не хотим использовать это, поскольку это означает, что отладка потенциально может быть более сложной (как указано в некоторых других публикациях, подобных этой), а также, если StatusField глубоко вложен в граф объектов, передаваемый методу WCF, я не уверен это решение будет работать и может привести к неправильному отображению типа и другим подобным проблемам. Я действительно хотел бы конкретно определить допустимые отображения, если это возможно.