Automapper 9:映射子属性

时间:2019-09-25 12:06:18

标签: c# asp.net-core automapper

在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在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 :(得分:0)

您可以尝试类似的事情

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