条件下的 Automapper 成员映射似乎很复杂

Automapper Member mapping on codition SeemsConvoluted

我正在尝试找到实现它的正确方法。

 return isOptionTrue? Mapper.Map<Context>(myObject) : Mapper.Map<ReplayContext>(myObject);

上下文包含我实际需要的所有字段。

public class ContextReplay: Context
{
    //This class is a work around to trick Automapper
}

然后当然是映射

Mapper.CreateMap<myObject, Context>()
      .ForMember(x => x.Id, opt => opt.MapFrom(y => y.Id))
      .ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
      .ForMember(x => x.Important, opt => opt.MapFrom(y => y.NormalProp));


Mapper.CreateMap<myObject, ContextReplay>()
      .ForMember(x => x.WellId, opt => opt.MapFrom(y => y.Id))
      .ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
      .ForMember(x => x.Important, opt => opt.MapFrom(y => y.ReplayProp));

如你所见,我很想:

Mapper.CreateMap<myObject, Context>()
      .ForMember(x => x.WellId, opt => opt.MapFrom(y => y.Id))
      .ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
      .ForMember(x => x.Important, opt => opt.MapFrom(y => isOptionTrue? y.NormProp: y.ReplayProp));

提问:是的,我有一个空子类,因为我有两个唯一的 MyObject 到 Context 映射。这整件事看起来像是一个超级 hacky 解决方法。我无法想象他们真的不支持这样的事情,但我很茫然。我不知道如何让我的 bool 一起传递。

也许我的想象力有限,但我个人认为 "auto mapping" 的用处有限,除非在两个 "identical" 类 之间进行映射。维护下面的代码不是更直接、更快、更容易吗?

var context = new Context {
    WellId = myObject.Id,
    Name = myObject.Name,
    Important = (isOptionTrue ? myObject.NormProp : myObject.ReplayProp)
};