2

我正在使用企业库验证应用程序块。带继承的企业库验证应用程序块

抽象类A public int fieldA; }

B类:一 {}

我添加验证输入B.我无法找到现场FIELDA,也就算我在配置进入,验证不成功。 VAB是否不考虑抽象类和继承属性或字段?

回答

2

我做了一个测试,这对基类和抽象基类来说工作正常。你可以发布你的配置吗?

请注意,在处理字段时不使用属性验证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> 
2

VAB使用属性时,仅支持继承。基于配置的验证不支持继承(正如您可以在FAQ here中看到的那样)。周围由entlib团队给出的工作是这样的:

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

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

这是太多的代码发布到这里在Stackoverflow,但你可以阅读我的博客文章关于它here

我希望这会有所帮助。

相关问题