微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 Virus-BeautyCode 阅读(2519) 评论(1) 编辑 收藏 举报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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构