Automapper 9: сопоставить дочернее свойство - PullRequest
0 голосов
/ 25 сентября 2019

В Automapper 7 я использую этот код для сопоставления дочернего свойства:

    Mapper.CreateMap<DomainClass, Child>();
    Mapper.CreateMap<DomainClass, Parent>()
      .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
      .ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
      .ForMember(d => d.Child, 
                 opt => opt.MapFrom(s => Mapper.Map<DomainClass, Child>(s)))

Теперь, в Automapper 9 я не могу использовать статический объект Mapper
Я использую DI для добавления объекта mapper в класс MappingProfile

        private readonly IMapper _mapper;

        public MappingProfile(IMapper mapper)
        {
            _mapper = mapper;
        }

Затем я использую объект _mapper вместо статического Mapper

 Mapper.CreateMap<DomainClass, Child>();
 Mapper.CreateMap<DomainClass, Parent>()
   .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
   .ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
   .ForMember(d => d.Child, 
              opt => opt.MapFrom(s => _mapper.Map<DomainClass, Child>(s)))

Но это не работает.Свойство Child всегда имеет значение null.Что я делаю не так?

1 Ответ

0 голосов
/ 25 сентября 2019

Как описано в руководстве по миграции , вам следует в идеале переместить конфигурации сопоставления в классы профилей:

class AppProfile : Profile {
  ctor(){
    CreateMap<DomainChild, Child>();
    CreateMap<DomainParent, Parent>();
  }
}

При условии, что все имена свойств совпадают, вам не нужно ничего, кромепредыдущая конфигурация.

Таким образом, вы можете легко настроить внедрение зависимости:

services.AddAutomapper(typeof(AppProfile));

Рабочую скрипку для конфигурации сопоставления можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...