微软企业库5.0学习笔记(四十四)实战数据验证模块
1 在业务对象上添加验证
添加对程序集【Microsoft.Practices.EnterpriseLibrary.Validation.dll】和【System.ComponentModel.DataAnnotations】的引用。
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
定义下面的对象
{
[StringLengthValidator(1, 25)]
public string FirstName { get; set; }
[StringLengthValidator(1, 25)]
public string LastName { get; set; }
[RegexValidator(@"^\d\d\d-\d\d-\d\d\d\d$")]
public string SSN { get; set; }
public Address Address { get; set; }
}
public class Address
{
[StringLengthValidator(1, 50)]
public string StreetAddress { get; set; }
[ValidatorComposition(CompositionType.And)]
[StringLengthValidator(1, 50)]
[ContainsCharactersValidator("sea", ContainsCharacters.All)]
public string City { get; set; }
[StringLengthValidator(2, 2)]
public string State { get; set; }
[RegexValidator(@"^\d{5}$")]
public string ZipCode { get; set; }
}
2 对业务对象进行验证
添加对
Microsoft.Practices.EnterpriseLibrary.Validation.dll
Microsoft.Practices.ServiceLocation.dll
Microsoft.Practices.EnterpriseLibrary.Common.dll
的引用。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Entity;
namespace AOPValidation.ConApp
{
class Program
{
static void Main(string[] args)
{
Validator<Customer> customerValidator = null;
ValidatorFactory validatorFactory = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>();
customerValidator = validatorFactory.CreateValidator<Customer>();
Customer customer = new Customer()
{
FirstName = "1231231233333333333333333333333333333333333333",
LastName = "2342424234",
SSN = "sdfsd",
Address = new Address()
{
City = "sdf",
State = "dsf",
StreetAddress = "sdfsdf",
ZipCode = "sd"
}
};
ValidationResults validationResults= customerValidator.Validate(customer);
if (!validationResults.IsValid)
{
Console.WriteLine("customer is invalid");
StringBuilder sb = new StringBuilder(0);
foreach (ValidationResult result in validationResults)
{
sb.AppendLine(string.Format(CultureInfo.CurrentCulture, "{0}:{1}",
result.Key, result.Message));
}
Console.WriteLine(sb.ToString());
}
else
{
Console.WriteLine("customer is valid");
}
Console.ReadLine();
}
}
}
验证的结果显示如下
{
[StringLengthValidator(1, 25)]
public string FirstName { get; set; }
[StringLengthValidator(1, 25)]
public string LastName { get; set; }
[RegexValidator(@"^\d\d\d-\d\d-\d\d\d\d$")]
public string SSN { get; set; }
[ObjectValidator]
public Address Address { get; set; }
}
这时候再次运行程序,发现Address的属性也被验证了。
3 使用配置实现验证
添加需要验证的类,然后为每个类添加验证规则之后,按照上面的图示进行配置(上面只添加了一个类Customer,如果需要用配置验证Address,需要再添加一个Validated Type),去掉业务类上的attribute,再次运行程序。具体的配置步骤和其他模块的配置类似,也可以参考:Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级) 。
就会看到下面的结果,配置的验证规则产生了效果,和在对象的属性上添加attribute是一样的效果。
通过代码和配置都可以在一个属性上面同时添加几个验证,例如:同时长度和内容。
[StringLengthValidator(1, 50)]
[ContainsCharactersValidator("sea", ContainsCharacters.All)]
public string City { get; set; }