我是Enterprise Library的新手。我正在尝试验证JuvenileClientContactItem
类型的业务对象。
JuvenileClientContactItem
个对象本身包含对象,在本例中是两个AddressType
类型对象的实例。
当我执行以下调用以验证JuvenileClientContactItem
时,我预计所有包含的对象也将被验证,并且PersonType
对象中遇到的任何错误都将添加到ValidationResults
集合,但只执行了JuvenileClientContactItem
对象的验证。
validationResults = validationService
.Validate(Of JuvenileClientContactItem) _
(juvenileClientContactItem, _
"JuvenileClientContactItemRuleSet", "PersonTypeRuleSet")
以下是企业库验证功能的签名:
Public Shared Function Validate(Of T)(ByVal target As T, _
ByVal ParamArray rulesets() As String) _
As Microsoft.Practices.EnterpriseLibrary.Validation.ValidationResults
要验证Address
对象中的两个JuvenileClientContactItem
子对象,我需要对Validate
方法执行单独调用,例如:
residentaddressValidationResults = validationService
.Validate(Of BusinessObjects.AddressType) _
(juvenileClientContactItem.ResidenceAddress, _
Me.View, "AddressTypeRuleSet")
我很想编写自己的通用验证方法,该方法使用反射来检查为验证而传递的对象,查找支持自我验证的包含对象并执行调用并将所有验证的结果聚合到单个返回的集合中。有更好的方法吗?
编辑:
根据下面提到的建议,我添加了以下代码:
<System.Serializable()> _
<DataContract()> _
<HasSelfValidation()> _
<ObjectValidator()> _
Public Class AddressType
...并且得到了ObjectValidatorAttribute无法应用的错误,因为该属性在此声明类型上无效。
为什么呢?我该如何纠正?
答案 0 :(得分:1)
您应该使用TheJuvenileClientContactItem
修饰ObjectValidatorAttribute
类型的属性,因为默认情况下验证应用程序块不会验证对象图(以防止出现性能问题和堆栈溢出异常)。