简体   繁体   English

Automapper 9:map 子属性

[英]Automapper 9: map child property

With Automapper 7 i use this code to map child property:使用 Automapper 7,我将此代码用于 map 子属性:

    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)))

Now, with Automapper 9 I cannot use the static Mapper object现在,使用 Automapper 9 我无法使用 static 映射器 object
I use DI to inject th mapper object in MappingProfile class我使用 DI 在 MappingProfile class 中注入映射器 object

        private readonly IMapper _mapper;

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

Then I use the _mapper object instead of the static Mapper然后我使用 _mapper object 而不是 static 映射器

 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)))

But it doesn't work.但它不起作用。 The Child property is always null. Child 属性始终为 null。 What am I doing wrong?我究竟做错了什么?

You can try something like that你可以尝试类似的东西

 static Mapper InitializeAutomapper()
    {
        var config = new MapperConfiguration(cfg => {
            cfg.CreateMap<DomainClass, Child>();
        });
        var mapper = new Mapper(config);
        return mapper;
    }
 var mapper = InitializeAutomapper();
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)))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM