当我从配置文件中读取规则时,我会这样做:
IConfigurationSource configurationSource = new FileConfigurationSource("myvalidation.config");
var validator = ValidationFactory.CreateValidator<Salary>(configurationSource);
配置文件如下所示:
<ruleset name="Default">
<properties>
<property name="Address">
<validator lowerBound="10" lowerBoundType="Inclusive" upperBound="15"
upperBoundType="Inclusive" negated="false" messageTemplate=""
messageTemplateResourceName="" messageTemplateResourceType=""
tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
name="String Length Validator" />
</property>
</properties>
</ruleset>
我的问题是 - 有没有办法 不 指定规则集名称?如果我使用属性方法并且可以使用以下方式验证,则不需要指定规则集名称:
ValidationResults results = Validation.Validate(salary);
现在从配置文件中读取时,我必须指定规则集名称。没有指定规则集名称的CreateValidator方法没有重载接受配置源。此外,配置文件中的xml需要规则集的名称属性
答案 0 :(得分:1)
使用属性时,如果未在验证程序或验证调用中指定规则集,则将应用未定义规则集或规则集名称为空的所有规则。
然而,对于配置,它略有不同,因为(如您所述)配置需要规则集的名称。您需要做的是创建一个名为的规则集,然后指明它是默认的规则集。要指示规则集是默认规则集,请将属性defaultRuleset="MyRule"
应用于配置中的type
元素。
如果在未指定Ruleset的情况下创建验证器,则在调用Validate时将执行配置中的默认Ruleset。
在您的示例中,配置看起来像:
<type defaultRuleset="Default" [...] >
<ruleset name="Default">
<properties>
<property name="Address">
<validator lowerBound="10" lowerBoundType="Inclusive" upperBound="15"
upperBoundType="Inclusive" negated="false" messageTemplate=""
messageTemplateResourceName="" messageTemplateResourceType=""
tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
name="String Length Validator" />
</property>
</properties>
</ruleset>
</type>
答案 1 :(得分:0)
上面的答案让我到了我需要去的地方。 但是,我认为以下信息也很有帮助。
Validator<MyConcreteClass> validator= ValidationFactory.CreateValidatorFromConfiguration<MyConcreteClass>();
ValidationResults vResults = validator.Validate(myInstanceOfMyConcreteClass);
自: http://msdn.microsoft.com/en-us/library/ee760419.aspx
CreateValidatorFromConfiguration&lt;(Of&lt;(T&gt;)&gt;)()()()
返回一个验证程序,表示通过默认规则集的配置为类型T指定的验证条件。
还有:
CreateValidator&lt;(Of&lt;(T&gt;)&gt;)()()()
返回一个验证器,表示通过类型T的配置和属性为类型T指定的验证条件及其默认规则集的祖先。
这意味着在一天结束时......知道ValidationFactory!