可以打电话给Mapper吗?在AfterMap内部映射

本文关键字:AfterMap 内部 映射 打电话 Mapper | 更新日期: 2023-09-27 18:04:15

这样的事情是允许的吗?

CreateMap<UserViewModel, User>()
    .ForMember(u => u.Password, o => o.Ignore())
    .AfterMap((src, dest) => {
        ...
        var entity = Mapper.Map<Entity>(src.SomeProperty);
        ...
    });

不适合我,它说映射试图使用AfterMap内部不存在

可以打电话给Mapper吗?在AfterMap内部映射

我注意到您正在使用映射内的静态AutoMapper类,但是您是否也使用映射外的静态实例,并且它是否为您的Entity类配置了映射?

下面的工作,请注意,context.Mapper调用确保相同的AutoMapper实例被用于调用Map和随后的AfterMap方法。

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<UserViewModel, User>()
       .AfterMap((source, destination, context) => 
       { 
            var entity = context.Mapper.Map<Entity>(source.SomeProperty);
       });
    cfg.CreateMap<EntityViewModel, Entity>();
});
var mapper = config.CreateMapper();
var viewModel = new UserViewModel
{
    Name = "Test User",
    SomeProperty = new EntityViewModel 
    { 
        Value = "Sub Class" 
    }
};
var user = mapper.Map<User>(viewModel);