.net 具有继承的企业库验证应用程序块

.net 具有继承的企业库验证应用程序块,.net,validation,enterprise-library,validation-application-bl,.net,Validation,Enterprise Library,Validation Application Bl,我正在使用企业库验证应用程序块 抽象A类 { 公共国际领域a; } B类:A { } 我将验证程序添加到类型B。我无法找到字段fieldA,而且即使我在配置中输入它,验证也不会成功。VAB没有考虑抽象类和继承的属性或字段吗?我做了一个测试,这对于基类和抽象基类来说效果很好。你能发布你的配置吗 在处理字段时,请注意不要使用属性验证XML(反之亦然) 根据上面的示例,您的配置应该如下所示: <validation> <type assemblyName="MyProje

我正在使用企业库验证应用程序块

抽象A类 { 公共国际领域a; }

B类:A { }


我将验证程序添加到类型B。我无法找到字段fieldA,而且即使我在配置中输入它,验证也不会成功。VAB没有考虑抽象类和继承的属性或字段吗?

我做了一个测试,这对于基类和抽象基类来说效果很好。你能发布你的配置吗

在处理字段时,请注意不要使用属性验证XML(反之亦然)

根据上面的示例,您的配置应该如下所示:

  <validation>
    <type assemblyName="MyProject.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
      name="MyProject.Test.B">
      <ruleset name="RuleSetB">
        <fields>
          <field name="fieldA">
            <validator lowerBound="1" lowerBoundType="Inclusive" upperBound="100"
              upperBoundType="Inclusive" negated="false" messageTemplate="fieldA must be between 1 and 100"
              messageTemplateResourceName="" messageTemplateResourceType=""
              tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RangeValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
              name="Range Validator" />
          </field>
        </fields>
      </ruleset>
    </type>
  </validation>

VAB仅在使用属性时支持继承。基于配置的验证不支持继承(如常见问题解答中所述)。entlib团队给出的解决方案如下:

要解决此问题,您可以 复制验证规范 对于子类

当然,这种解决方法很糟糕,因为对于基类中的每一个更改,您可能都必须将其复制到许多派生类型。这是脆弱和容易出错的。因此,我构建了一个能够将验证从基类复制到实现的解决方案

这是太多的代码张贴在这里的Stackoverflow,但你可以阅读我的博客文章

我希望这有帮助