我是企业图书馆的新手。我正在尝试验证类型的业务对象JuvenileClientContactItem
。
JuvenileClientContactItem
对象本身包含对象,在这种情况下,是类型对象的两个实例AddressType
。
当我执行以下调用来验证 时JuvenileClientContactItem
,我希望所有包含的对象也将被验证,并且PersonType
对象中遇到的任何错误都将添加到ValidationResults
集合中,但只JuvenileClientContactItem
执行了对 oject 的验证。
validationResults = validationService
.Validate(Of JuvenileClientContactItem) _
(juvenileClientContactItem, _
"JuvenileClientContactItemRuleSet", "PersonTypeRuleSet")
这是 Enterprise Library Validate 函数的签名:
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 无法应用的错误,因为该属性在此声明类型上无效。
为什么?我该如何纠正?