2011-08-04 9 views
3

はのは、私は2つの単純なクラスを持っていると仮定しましょう次に、顧客インスタンスのすべてのプロパティを検証することを選択しましたが、Validatorは顧客インスタンスのNameプロパティを検証しますが、DetailsのAddressプロパティは検証しません。データ注釈検証を手動で使用してオブジェクトグラフ

これは設計によるものですか、ここで何か不足していますか?さらに、これが設計によるのであれば、手動でオブジェクトグラフ全体に対してバリデーターを使用するのではなく、ネストされた型を含む検証属性で装飾された完全なオブジェクトグラフを手動で検証する堅牢な方法がありますか?

これはコンソールアプリケーション内でテストされており、ASP.NET MVCアプリケーションではテストされていません。

大切にしてください。

答えて

1

私はほとんど同じ問題を抱えていましたが、ネストされたオブジェクトのコレクションを持っていました。コンテナクラスにIValidatableObjectを実装することで解決できました。あなたのケースでは、やや簡単です。このようなもの:

public class Customer : IValidatableObject 
{ 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     var context = new ValidationContext(this.Details, validationContext.ServiceContainer, validationContext.Items); 
     var results = new List<ValidationResult>(); 
     Validator.TryValidateObject(this.Details, context, results); 
     return results; 
    } 
} 

希望します。

+0

これは再帰のレベルが1つで、手動で手動で作成する必要があります。カスタムの 'Validate'実装をせずに、オブジェクトグラフ全体を自動的にトラバースする方法はありますか? – gzak

関連する問題