Enterprise Library验证所有规则集

时间:2011-01-17 21:05:01

标签: c# validation enterprise-library

我有一个使用Microsoft Enterprise Library验证对象的问题 我有一些针对不同领域的验证器。 但我需要将对象中的不同字段放在不同的规则集中(如本例所示):

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; }
}

问题是如何验证对象以便考虑所有规则集?​​

一种解决方案就是这样,但我不想一直将规则集作为参数传递。

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

这只会验证默认规则集(对于我的示例,对象将始终有效,即使其名称超过200个字符)

var result = Validation.Validate<Category>(category);

那么有没有办法验证所有规则集而无需为Validation.Validate()的每次调用手动指定它们?

1 个答案:

答案 0 :(得分:0)

您可以在属性上拥有多个规则集。因此,可以引入CombinedRuleset,您可以在现有规则集之上使用Name和Description属性。但是,这需要复制所有验证规则,这是代码味道。

如果您希望在将来的版本中将规则集加入功能添加到EntLib,请建议here