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

我希望這會有所幫助。

相關問題