entlib验证组件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;


//https://msdn.microsoft.com/zh-cn/library/ff953181(v=pandp.50).aspx 企业库总目录
//https://msdn.microsoft.com/zh-cn/library/hh315829(v=pandp.50).aspx 企业库验证组件


/*
 验证程序的 Message 属性实际上是一个模板,而不只是一个简单的可显示的文本字符串。
 * 在块将单个 ValidationResult 添加到它检测到的每个验证错误的 ValidationResults 实例中时,
 * 它分析 Message 属性的值,该属性查找将用检测到错误的验证程序的特定属性值来替换的标记。
注入到占位符标记中的值和使用的标记数量取决于验证程序的类型(虽然有三个通用于所有验证程序的标记)。
 * 标记 {0} 将被正在验证的对象的值替换(确保在显示或使用该值之前先转义该值,以防止注入式攻击)。
 * 标记 {1} 将包含正在验证的成员的名称(如果可用),并等同于验证程序的 Key 属性。标记 {2) 将包含验证程序的 Tag 属性的值。
其余标记取决于相应的验证程序类型。例如,对于“包含字符”验证程序,标记 {3} 和 {4} 将要检查的字符和 ContainsCharacters 值(All 或 Any)。
 * 对于范围验证程序(例如“字符串长度”验证程序),标记 {3} 到 {6} 将包含您为验证程序指定的下限和上限的值和绑定类型(Inclusive、Exclusive 或 Ignore)。例如,可以定义如下“字符串长度”验证程序:
[StringLengthValidator(5, RangeBoundaryType.Inclusive, 20, 
       RangeBoundaryType.Inclusive,
       MessageTemplate = "{1} must be between {3} and {5} characters.")]
 */
namespace DPC.EntLib.Validation
{
    class Program
    {
        static void Main(string[] args)
        {
            Validator<Person> personValidator
                = ValidationFactory.CreateValidator<Person>();
            Person person = new Person();
            person.Name = "";
            person.Age = 110;
            ValidationResults valResults = personValidator.Validate(person);

            //personValidator.DoValidate(person,
            if (valResults.Count == 0)
            {
                Console.WriteLine("验证通过...");
            }
            else
            {
                foreach (var result in valResults)
                {
                    Console.WriteLine(result.Message);
                }
            }
            Console.ReadLine();
        }
    }

    [HasSelfValidation]
    public class Person
    {
        [StringLengthValidator(1,6,MessageTemplate="xxxx")]
        //[StringLength(4,MinimumLength = 1,ErrorMessage="姓名长度要介于1-4个字符")]
        public string Name { get; set; }

       [RangeValidator(0, RangeBoundaryType.Inclusive, 100, RangeBoundaryType.Inclusive, MessageTemplate = "字段{1}的值必须介于{3}-{5}之间")]
        public int Age { get; set; }

        [NotNullValidator(MessageTemplate ="zzzzzzz")]
        public int? Weight { get; set; }

        [SelfValidation()]
        public void DoValidate(ValidationResults results)
        {
            results.AddResult(new ValidationResult("自定义错误消息",this,"self","",null ));
        }
       
    }
}

  

posted @ 2015-05-18 00:26  玻璃鱼儿  阅读(234)  评论(0编辑  收藏  举报