Как обрабатывать пользовательские свойства в AutoMapper

21
задан Chase Florell 3 February 2012 в 16:49
поделиться

2 ответа

В автомате, где вы создаете карту, вы можете указать дополнительные процессы для конкретных членов типа назначения.

Итак, где ваша карта по умолчанию будет

Mapper.Map<Domain.User, UsersDetailsViewModel>();

, существует свободный синтаксис для определения более сложных отображений:

Mapper.Map<Domain.User, UsersDetailsViewModel>()
      .ForMember(vm=>vm.UserName, m=>m.MapFrom(u=>(u.UserName != null) 
                                               ? u.UserName 
                                               : "User" + u.ID.ToString()));

Здесь ForMember принимает два аргумента, первый определяет свойство, которое вы отображаете. Второй предоставляет средства определения отображения. В качестве примера я выбрал и показал одно из простых отображений.

Если вам требуется более сложное отображение (например, отображение CurrentUser), вы можете создать класс, который реализует интерфейс IResolver, включить логику отображения в эти новые предложения, а затем добавить это в отображение.

Mapper.Map<Domain.User, UsersDetailsViewModel>()
  .ForMember(vm=>vm.IsUserMatch, m=>m.ResolveUsing<MatchingUserResolver>()));

Когда Mapper придет, чтобы сделать отображение, он вызовет ваш пользовательский преобразователь.

Как только вы обнаружите синтаксис метода .ForMember, все остальные виды слотов встанут на свои места.

50
ответ дан Bobbles 3 February 2012 в 16:49
поделиться

Я думаю, что синтаксис немного изменился в 2019 (Ядро ASP.NET 2.2), этот метод теперь обрабатывается с MapperConfiguration, и статические методы не более доступны.

, Но я соглашаюсь с @KJSR, это сообщение является все еще действительно полезным:-)

 private Mapper UserMapper= new Mapper(new MapperConfiguration(cfg => (cfg.CreateMap<Domain.User, UsersDetailsViewModel>())
            .ForMember(x=>x.Email, y=>y.MapFrom(z=>z.Email))
            .ForMember(x => x.UserName , y => y.MapFrom(user => (user.UserName != null) ? user.UserName : "User" + user.ID.ToString))));
1
ответ дан 29 November 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: