0

Enterprise Library を初めて使用します。タイプ のビジネス オブジェクトを検証しようとしていJuvenileClientContactItemます。

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

を検証するために次の呼び出しを実行すると、JuvenileClientContactItem含まれているすべてのオブジェクトも検証され、オブジェクトで発生したエラーがコレクションにPersonType追加されると予想していましたが、オブジェクトの検証のみが実行されました。ValidationResultsJuvenileClientContactItem

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オブジェクト内の 2 つのサブオブジェクトを検証するには、メソッドJuvenileClientContactItemを個別に呼び出す必要があります。次に例を示します。Validate

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

リフレクションを使用して検証用に渡されたオブジェクトを調べ、自己検証をサポートし、呼び出しを実行し、すべての検証の結果を 1 つの返されたコレクションに集約する、含まれているオブジェクトを探す独自の汎用検証メソッドを作成したいと思います。より良いアプローチはありますか?

編集:

以下の提案に従って、次のコードを追加しました。

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

...そして、属性がこの宣言タイプで有効でないため、ObjectValidatorAttribute を適用できないというエラーが発生しました。

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

4

1 に答える 1

1

Validation Application Block はデフォルトでオブジェクト グラフを検証しないため (パフォーマンスの問題とスタック オーバーフローの例外を防ぐため) 、TheJuvenileClientContactItem型のプロパティを で装飾する必要があります。ObjectValidatorAttribute

于 2011-03-23T17:26:20.583 に答える