2011-01-17 8 views
0

Microsoftエンタープライズライブラリを使用してオブジェクトを検証する質問があります。
フィールドごとにバリデータがあります。 しかし、私は(この例のように)異なるルールセットにあるようにオブジェクト内の異なるフィールドが必要になります。エンタープライズライブラリすべてのルールセットを検証

public class Category 
{ 
[NotNullValidator(MessageTemplate="The category name cannot be null", Ruleset="NameRuleset")] 
[StringLengthValidator(1, 200, MessageTemplate = "The category name must be between {3} and {5} characters", Ruleset = "NameRuleset")] 
public string Name { get; set; } 

[NotNullValidator(MessageTemplate = "The category description cannot be null", Ruleset = "DescriptionRuleset")] 
[StringLengthValidator(1, 2000, MessageTemplate = "The category description must be between {3} and {5} characters", Ruleset = "DescriptionRuleset")] 
public string Description { get; set; } 
} 

質問は、すべてのルールセットが考慮されているように、私は、オブジェクトを検証しない方法ですか?

これは1つの解決策ですが、私はルールセットを常にパラメータとして渡したくありません。

var result = Validation.Validate<Category>(category, new string[] { "NameRuleset", "DescriptionRuleset" }); 

そして、これが唯一の

(私の例では、オブジェクトは常にその名が200文字を超える場合でも、有効になります)、デフォルトのルールセットを検証します
var result = Validation.Validate<Category>(category); 

そうにどのような方法がありますValidation.Validate()の呼び出しごとに手動で指定することなく、すべてのルールセットを検証しますか?

+0

は、なぜあなたは、デフォルトのルールセットでそれらの検証を指定しませんか? – Steven

+0

個別のルールセットを指定したので、一度に1つのフィールドを検証する単体テストを書くことができます。これにより、「名前」フィールド(および名前フィールドのみ)の有効性をチェックする1つのテストと、「説明」フィールドを検証するもう1つのテストを書くことができます。 – Ove

答えて

0

プロパティに複数のルールセットを設定できます。したがって、既存のルールセットの上にあるNameプロパティとDescriptionプロパティの両方に使用するCombinedRulesetを導入することが可能です。ただし、これはコードの匂いであるすべての検証ルールを複製する必要があります。あなたがそれらすべてを検証したい場合は

あなたは将来のリリースでEntLibに追加される機能に参加するルールセットをご希望の場合は、here

ことを示唆して
関連する問題