AutoMapper - отображение дочерних коллекций в модели просмотра

У меня есть модель просмотра, которая должна отображать определенное поле IEnumerable в виде текстового поля, разделенного точкой с запятой. Сначала я подумал об использовании DefaultModelBinder для его преобразования, но у меня возникли проблемы с мыслью, как добиться этого в обоих направлениях (dto <-> viewmodel).

Псевдонимы - это поле, которое я пытаюсь отобразить как одно текстовое поле, разделенное точкой с запятой.

public class Parent
{
    public IEnumerable<Child> Children { get; set; }
}

public class Child
{
    public IEnumerable<string> Nicknames { get; set; }
}

Итак, я решил попробовать AutoMapper, я создал две модели просмотра:

public class ParentViewModel
{
    public IEnumerable<ChildViewModel> Children { get; set; }
}

public class ChildViewModel
{
    public string Nicknames { get; set; }
}

Затем я создал сопоставления, подобные этому, для дочерних элементов (для краткости опущено обратное преобразование)

Mapper.CreateMap<Child, ChildViewModel>().ForMember(
d => d.Nicknames, o => o.ResolveUsing<ListToStringConverter>().FromMember(s => s.Nicknames);

Затем для родителя создал наивная карта (опять же, пропущенная в противном случае)

Mapper.CreateMap<Parent, ParentViewModel>();

Я действительно ожидал, что дочерние сопоставления будут происходить автоматически, но этого не происходит, я уже создал слишком много «правильного» кода для решения действительно простой проблемы, которая в любой другой более простая / старая среда, отличная от MVC, я бы давно покончил с ней :) Как я могу продолжить и сказать AutoMapper преобразовать дочерние элементы без написания другого «преобразователя дочерних элементов».

Неужели я переусердствовал и есть способ попроще?

Спасибо!

9
задан Madd0g 25 November 2011 в 14:35
поделиться