Отображение списков в моем классе Mapper с использованием AutoMapper - PullRequest
0 голосов
/ 29 сентября 2011

Я использую ASP.NET MVC 3 и AutoMapper.

В моем контроллере категорий я возвращаю список категорий и хочу сопоставить каждую категорию с моделью представления категорий, которая используется в моей сетке. У меня есть свой собственный метод класса mapper, который принимает источник, тип источника и тип назначения, а затем выполняет сопоставление отдельных объектов. Как бы я добавил и дополнительный метод, чтобы я мог сопоставить списки?

Например, если я хочу сопоставить одну категорию с моей моделью представления редактирования категории, то будет использовано следующее сопоставление:

Mapper.CreateMap<CategoryCreateViewModel, Category>();

В моем контроллере я бы отобразил 2 следующим образом:

Category category = (Category)categoryMapper.Map(viewModel, typeof(CategoryCreateViewModel), typeof(Category));

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

public class CategoryMapper : ICategoryMapper
{
     static CategoryMapper()
     {
          Mapper.CreateMap<Category, CategoryCreateViewModel>();
          Mapper.CreateMap<Category, CategoryViewModel>();
          Mapper.CreateMap<CategoryCreateViewModel, Category>();
     }

     public object Map(object source, Type sourceType, Type destinationType)
     {
          return Mapper.Map(source, sourceType, destinationType);
     }

     // I have been trying to get this right but not working
     //public object Map(object source, IEnumerable<Type> sourceType, IEnumerable<Type> destinationType)
     //{
     //     return Mapper.Map(sourceType, destinationType);
     //}
}

Я хочу добавить другой метод, где я могу отображать списки. Как бы я это сделал?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

AutoMapper знает, как отображать списки, вам не нужен дополнительный код.

Пока вы предоставляете сопоставление для одного объекта, оно будет работать.

например:

Mapper.CreateMap<Source,Dest>();

Тогда:

var mappedCollection = Mapper.Map<IEnumerable<Source>,IEnumerable<Dest>>(items);

И это будет работать.

0 голосов
/ 30 сентября 2011

Я хотел использовать свои методы IMapper, как я упоминал выше.С помощью Darin Dimitrov я получил это на работу.Вот мой код контроллера:

public ActionResult JsonGetParentCategoryList()
{
     IEnumerable<Category> categoryList = categoryService.GetAll();

     // Mapping
     IEnumerable<CategoryViewModel> viewModelList = (IEnumerable<CategoryViewModel>)
          categoryMapper.Map(
               categoryList,
               typeof(IEnumerable<Category>),
               typeof(IEnumerable<CategoryViewModel>)
     );

     JsonEncapsulatorDto<CategoryViewModel> data = new JsonEncapsulatorDto<CategoryViewModel>
     {
          DataResultSet = viewModelList
     };

     return Json(data, JsonRequestBehavior.AllowGet);
}

Он работает с моим текущим методом карты IMapper.

0 голосов
/ 29 сентября 2011

попробуй

var maplist= Mapper.Map<IEnumerable<TSource>, IEnumerable<TDestination>>(IEnumerable<TSource>source);

я не уверен, но попробуй что-то вроде

var category = CategoryMapper.Map(viewModel, CategoryCreateViewModel, Category);

public object Map(object source, IEnumerable<T> sourceType, IEnumerable<T> destinationType)
     {
         return Mapper.Map<sourceType,destinationType>(source);
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...