Enterprise Library 5.0 中的Validators

本文解决了升级至Enterprise Library5.0后出现的验证器编译错误问题。作者发现新版本要求自定义验证器继承自ValueValidatorAttribute而非ValidatorAttribute,并通过引入DataAnnotation支持成功解决了错误。

  自.NET 4.0的一系列相关技术发布后,重装了WINDOWS。。重装了Visual Studio。。重装了SQL Server等等,真是微软牵一发动我全身。昨晚下载了Enterprise Library 5.0的组件,过去我使用4.1开发的项目中,大量应用了这个框架的Validation相关组件,它的设计的确很不错。不过昨天当我使用新版本的时候,出现了一些毫无头绪的编译错误。

2010051215064584.jpg

  What?所有在Microsoft.Practices.EnterpriseLibrary.Validation.Validators空间下的验证器类都出现了这样的错误。它怎么就不是一个attribute class呢?反正可以看源代码,当然去看一下到底发生什么事。首先看一下这个ValidatorCompositionAttribute类的定义:

ContractedBlock.gif ExpandedBlockStart.gif 代码
namespace Microsoft.Practices.EnterpriseLibrary.Validation.Validators
{
/// <summary>
/// Indicates that the kind of composition to use when multiple <see cref="ValidatorAttribute"/> instances
/// are bound to a language element.
/// </summary>
/// <seealso cref="ValidatorAttribute"/>
[AttributeUsage(AttributeTargets.Property
| AttributeTargets.Field
| AttributeTargets.Method
| AttributeTargets.Parameter
| AttributeTargets.Class,
AllowMultiple
= true ,
Inherited
= false )]
public sealed class ValidatorCompositionAttribute : BaseValidationAttribute
{
private CompositionType compositionType;
/// <summary>
/// Initializes a new instance of the <see cref="ValidatorCompositionAttribute"/> class.
/// </summary>
/// <param name="compositionType"> The <see cref="CompositionType"/> to be used. </param>
public ValidatorCompositionAttribute(CompositionType compositionType)
{
this .compositionType = compositionType;
}

internal CompositionType CompositionType
{
get { return compositionType; }
}
}
}

它继承自BaseValidationAttribute类,不用看下去,它肯定是一个attribute class,因为它的类定义都已经使用了只有从Attribute中继承的类才能使用的特性——AttributeUsage。毫无头绪,唯有上官网看下这个版本的一些变动。该文档地址是:http://entlib.codeplex.com/wikipage?title=EntLib5ChangeLog&#vab

2010051215124629.jpg

  截图里面说明了关于Validation框架的一些变动,尤其是最后一点,说自定义的验证器类必须继承自ValueValidatorAttribute,而不是ValidatorAttribute,否则可能会出现错误。于是我又跑去看刚才BaseValidationAttribute的定义:

2010051215155431.jpg

晕,原来BaseValidationAttribute继承自ValidatorAttribute类,难道就是这里出了问题?不过尽管如此,我没办法改动它啊。于是我留意到,Enterprise Library 5.0的验证组件好像加入了Data Annotation的支持,而Data Annotation的相关组件是System.ComponentModel.DataAnnotations.dll,怀着碰下运气的心态,我在项目中加入了这个组件的引用。Bingo~!所有编译错误消失无踪。原来Enterprise Library 5.0的验证器类在实现上需要使用到Data Annotation,过去是不用的。问题总算结果了。

转载于:https://www.cnblogs.com/klzwj1988/archive/2010/05/12/1733730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值