2012-03-07 2 views
0

Для моего веб-приложения ASP.NET я в настоящее время использую Automapper для сопоставления моделей моделей (DTO) -> view. Мои модели просмотра имеют все свойства строки, потому что я использую Mustache, механизм без логического шаблона.Automapper: Иерархия сопоставления

Я подвергая API на моем сайте (через JSON и т.д.), и то, что я бы как сделать, это выполнить следующее отображение:

Model -> Base ViewModel -> Web ViewModel 

Затем "Base ViewModel" может быть сериализована для моего API (например, с числовыми значениями для валюты). Оттуда я сделаю простое сопоставление для моей «Web ViewModel» (например, с форматированными строками значений, ссылками и т. Д.).

Проблема в том, что я не могу заставить это работать. Определение сопоставления Model -> Base ViewModel и Base ViewModel -> Web ViewModel сопоставлений недостаточно, кажется, что я получаю мой Web ViewModel, и если я явно добавляю отображение Model -> Web ViewModel, Automapper просто пытается напрямую отобразить карту, пропуская промежуточный шаг, на который я опишу.

Можно ли использовать Automapper как это? Я понимаю, что, возможно, я мог бы явно сделать два последовательных преобразования для достижения правильного результата, но я подумал, что попрошу здесь посмотреть, могу ли я заставить Automapper обрабатывать преобразование за один шаг.

ответ

0

Ну, я не верю (или, честно говоря, я не знаю, как) это было бы возможно.

Но вы можете попробовать

Создайте Mappings

Model.CreateMap<Model, BaseViewModel>()... 
Model.CreateMap<BaseViewModel, WebViewModel>()... 

и попробовать универсальный помощник, как это, чтобы изменить для ваших нужд

public static void TwoStepMapping<TSource, TIntermediate, TDest>(TSource source, TDest dest) where TIntermediate : new() 
      { 
       Mapper.Map(Mapper.Map(source, new TIntermediate()), dest); 
      } 

вызов:

TwoStepMapping<Model, BaseViewModel, WebViewModel>(model, webViewModel); 
Смежные вопросы