访问ForAllMembers方法中的源对象

本文关键字:对象 ForAllMembers 方法 访问 | 更新日期: 2023-09-27 18:30:03

尝试跳过基于viewModel上特定字段的属性映射。是否有任何方法可以访问ForAllMembers->条件方法中的源对象

Mapper.CreateMap<AViewModel, AEntity>()
      .IgnoreMembers(ignoreMembers)
      .ForAllMembers(o => {
          o.Condition(ctx => {
                        //Need to access AViewModel instance here
                return "Id" == ctx.MemberName;
    });
   });

访问ForAllMembers方法中的源对象

我不知道官方的方法,但您可以在ResolutionContext 上使用Parent属性

Mapper.CreateMap<AViewModel, AEntity>()
      .IgnoreMembers(ignoreMembers)
      .ForAllMembers(o => {
          o.Condition(ctx => {
                AViewModel instance = (AViewModel)ctx.Parent.SourceValue;
                return "Id" == ctx.MemberName;
    });
   });

如果你在映射的多个层次中,你可以"遍历"Parent关系,直到你找到你想要的类型。

我认为您可以使用自定义ValueResolver的另一种方式来实现这一点。

参见:

使用AutoMapper 的条件投影