在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。 我在做什么错了?
答案 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)))