Automapper: отображение иерархии - PullRequest
0 голосов
/ 07 марта 2012

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

Я выставляю 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 обработать преобразование за один шаг.

1 Ответ

0 голосов
/ 08 марта 2012

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

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

Создать свои отображения

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...