.net 具有继承的企业库验证应用程序块
我正在使用企业库验证应用程序块 抽象A类 { 公共国际领域a; } B类:A { }.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
我将验证程序添加到类型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,但你可以阅读我的博客文章 我希望这有帮助