自定义验证类,扩展企业库验证程序块

 

       当验证程序块中的验证器不能满足我们的验证要求时,就需要扩展验证程序块,创建自定义的验证器类。

       创建自定义的验证器类一般需要完成三个类,如下:

1.      xxxValidator

2.      xxxValidatorData

3.      xxxValidatorAttribute

          说明:

1.        xxxValidator

验证器类,包含你自己的验证逻辑,以及错误提示信息。

这个类必须继承自已有的验证器类或者Validator, Validator<T>, ValueValidator, ValueValidator<T>当中的一个。

ValidatorValueValidator的差别就在于是验证类是否有Negated属性,即反面验证属性。

2.        xxxValidaotrData

   用于从配置文件中读取配置数据,构建验证类对象。当你从配置文       件中创建验证器时就需要此类。

这个类必须继承自已有的配置类或者ValidatorData, ValueValidatorData当中的一个。

ValidatorDataValueValidatorData的差别就在于是配置数据中是否有Negated属性,即反面验证属性。

3.        xxxValiatorAttribute

        用于从特性(attribute)中读取配置数据,构建验证类对象。当你从类

     的特性中创建验证器是就需要此类。

       这个类必须继承自已有的配置类或者ValiatorAttribute,  

 ValueValiatorAttribute当中的一个。

 ValiatorAttributeValueValiatorAttribute的差别就在于是配置数据    中是否有Negated属性,即反面验证属性。

示例:

         我们要创建一个多值验证类,对给定值进行验证,判断其值是否是给定的多值的组合。

         来看看我们需要什么配置数据:既然是多值验证,那当然需要提供多值列表。多值组合在一起,那就需要一个分隔符。所以此多值验证类只需要两个配置数据:多值列表和分隔符。可能你会想,少了一个配置数据吧,要验证的属性或者字段。这个配置数据就不用我们操心了,企业验证库已经担当了这个责任。

     先创建多值验证类MutilValueValidaotr,她需要什么数据呢,显然,她需要一个多值集合和一个分隔符。再看看我这个验证类是继承自Validator还是ValueValidator呢,两者的区别只在于是否有“否验证”的功能,这里我们让她继承自Validator<string>,因为我们不需要“否验证”的特点,而且要验证的值为string类型。继承自Validator<string>要实现

void DoValidate(string objectToValidate, object currentTarget, string key, ValidationResults validationResults)方法和string DefaultMessageTemplate属性,前者是编写你自己的验证逻辑,后者是默认的错误信息。先看看DoValidate的参数,objectToValidate是要验证的值,currentTarget是要验证的值所属的对象,key是要验证的值得属性名或者字段名,validationResults是验证结果集,我们验证的结果要加入到结果集中。

MutilValueValidaotr增加三个构造函数其中一个构造函数的参数是MutilValueData,即我们将要创建的配置文件类。

代码见MutilValueValidator.cs

         接下来创建配置文件类MutilValueValidaotrData,我们已经知道配置文件要提供两个配置数据:多值列表和分隔符

我们增加两个属性MutilValueSeperator属性值的来源于配置文件,给这两个类增加ConfigurationProperty特性,这样告之它们的值来源于配置文件。

MutilValueValidaotrData我们需要实现Validator DoCreateValidator(Type targetType) 方法,用于创建一个验证器类MutilValueValidaotr对象。

代码见MutilValueValidatorData.cs

         最后创建特性配置类MutilValueValidaotrAttribute。此类也要实现protected override Validator DoCreateValidator(Type targetType),用于创建MutilValueValidaotr对象。显然她和MutilValueValidaotrData一样,需要同样的配置数据MutilValueSeperator,为此我们创建这样的两个字段,从构造函数里初始化这两个数据。

代码见MutilValueValidatorAttribute.cs

 

  到此所需要的三个类已经完成,现在编写测试代码,使用Nuit来测试,Nunit安装程序为NUnit-2.4.8-net-2.0.msi

  源码链接:https://files.cnblogs.com/kivenhou/CustomValidatorDemo.rar

posted @ 2010-03-04 21:41  天空行马  阅读(259)  评论(0编辑  收藏  举报