0

私はエンタープライズライブラリを初めて使用しています。タイプJuvenileClientContactItemのビジネスオブジェクトを検証しようとしています。ビジネスオブジェクトの検証を実行します。含まれているオブジェクトはどうですか?

オブジェクトJuvenileClientContactItemオブジェクトには、この場合はオブジェクトの2つのインスタンスが含まれています(AddressTypeタイプ)。

私はJuvenileClientContactItemを検証するために、次の呼び出しを実行すると、私はすべてのオブジェクトが含まれていることを期待することも検証されるだろうとPersonTypeオブジェクトで発生したエラーがValidationResultsコレクションに追加されますが、JuvenileClientContactItem上の唯一の検証はojectありました実行されます。ここで

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 

JuvenileClientContactItemオブジェクト内の2つのAddressサブオブジェクトを検証するために、私はValidate方法、例えばへの個別の呼び出しを実行する必要があります

residentaddressValidationResults = validationService 
    .Validate(Of BusinessObjects.AddressType) _ 
    (juvenileClientContactItem.ResidenceAddress, _ 
    Me.View, "AddressTypeRuleSet") 

反射を使用してオブジェクトを検証する独自の一般的な検証方法を作成したいと思います検証のために渡され、自己妥当性検証をサポートしているオブジェクトが含まれているかどうかを調べ、呼び出しを実行し、すべての検証の結果を1つの返されたコレクションに集約します。より良いアプローチがありますか?

編集:

<System.Serializable()> _ 
<DataContract()> _ 
<HasSelfValidation()> _ 
<ObjectValidator()> _ 
Public Class AddressType 

...そして、属性は、この上で有効でないためObjectValidatorAttributeは、BAは適用できないというエラーが発生しました:下記の提案に続き

、私はこのコードを追加しました宣言型。

なぜですか?どうすれば修正できますか?

答えて

1

ObjectValidatorAttributeTheJuvenileClientContactItemタイプのプロパティを修飾する必要があります。これは、検証アプリケーションブロックがデフォルトでオブジェクトグラフを検証しないためです(パフォーマンスの問題やスタックオーバーフローの例外を防ぐためです)。

+0

「ObjectValidatorAttributeはこの属性がこの宣言型では有効ではないため、適用できません」というエラーが表示されます。 – ChadD

+0

@Velika: 'AddressType'自体ではなく、' JuvenileClientContactItem'型の属性に属性を置くべきです。 – Steven

+0

私は試しました。同じエラー。 – ChadD

関連する問題