Как заставить AutoMapper вызывать метод после сопоставления ViewModel - PullRequest
14 голосов
/ 30 июля 2011

Можно ли заставить AutoMapper вызывать метод после сопоставления источника и назначения?

Мой ViewModel выглядит так:

 public class ShowCategoriesViewModel
{
    public int category_id { get; set; }
    public string category_name { get; set; }

    public List<MvcApplication3.Models.Category> SubCategories { get; set; }

    public void Sort()
    {
        SubCategories.Sort(new CompareCategory());
    }

}

А мой контроллер выглядит так:

        public ActionResult Index()
    {
        var category = db.Category.Where(y => y.parrent_id == null).ToList();

        Mapper.CreateMap<Category, ShowCategoriesViewModel>().
            ForMember(dest => dest.SubCategories, opt => opt.MapFrom(origin => origin.Category1));

        List<ShowCategoriesViewModel> scvm = Mapper.Map<List<Category>, List<ShowCategoriesViewModel>>(category);

        foreach (ShowCategoriesViewModel model in scvm)
        {
            model.Sort();
        }

        return View(scvm);
    }

Я бы хотел, чтобы AutoMapper вызывал метод Sort () вместо выполнения цикла foreach.Возможно ли это?

1 Ответ

20 голосов
/ 30 июля 2011

Я думаю, вы можете использовать .AfterMap здесь

Mapper.CreateMap<Category, ShowCategoriesViewModel>()
    .ForMember(dest => dest.SubCategories, opt => opt.MapFrom(origin => origin.Category1))
    .AfterMap((c,s) => s.Sort());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...