条件对象映射器上的自动映射属性验证

时间:2018-02-13 21:50:20

标签: automapper

我正在使用AutoMapper,我在下面配置的条件映射器似乎工作正常,但我无法弄清楚如何关闭它的验证(例如MemberList.None),就像在显式{ {1}}在它下面打电话。

CreateMap

暂时想出这个粗略的等价物。仍然想知道是否有办法用public static void Configure(IMapperConfigurationExpression cfg) { // I want to put a MemberList.None on this cfg.AddConditionalObjectMapper().Where((s, d) => { return s == typeof(BusinessObjects.Tab) && d.Namespace == "DocuSign.eSign.Model" && //is in model namespace d.GetMembers().FirstOrDefault(m => m.Name == "TabId") != null; //has a property TabId makes it a DocuSign Tab object }); cfg.CreateMap<BusinessObjects.RequestModels.SigningEnvelope, ds.EnvelopeDefinition>(MemberList.Source); } 方法实现这一点。

AddConditionalObjectMapper

1 个答案:

答案 0 :(得分:0)

H / T到Lucian,指出我的答案。

自动映射配置文件类中有一个名为ForAllMaps的实例方法,它允许您迭代有条件创建的映射。所以我创建了一个继承自Profile的新类,并且能够使用下面的代码段实现我的原始目标。

public class DocuSignTabsMappingConfiguration: Profile {
  public DocuSignTabsMappingConfiguration() {
    AddConditionalObjectMapper()
      .Where((s, d) => {
        return s == typeof(BusinessObjects.Tab) &&
        d.Namespace == "DocuSign.eSign.Model" &&
        d.GetMembers().FirstOrDefault(m => m.Name == "TabId") != null;
      });

    ForAllMaps((tm, exp) => exp.ValidateMemberList(MemberList.None));
  }
}

在我的主要Mapper配置中,用以下代码替换了我的旧代码块:

cfg.AddProfile(typeof(DocuSignTabsMappingConfiguration));