是否有标准框架(可能是Enterprise Library ...或.NET本身的一部分),允许您在方法属性中进行通用参数验证?

有帮助吗?

解决方案

Microsoft Code Contracts ,它们是.NET Framework的一部分自4.0 CTP以来,作为独立程序包可用于早期的.NET Framework版本,允许指定编码假设。这包括指定可以验证参数的前置条件。

参数检查的示例用法是(从代码合同文档):

public Rational(int numerator, int denominator)
{
    Contract.Requires(denominator ! = 0);

    this.numerator = numerator;
    this.denominator = denominator;
}

使用代码契约的好处在于它是一个将成为未来.NET Framework版本的一部分的库,因此迟早会在应用程序中减少一个依赖项。

编辑:刚刚注意到您特别要求使用属性进行参数检查的库...代码合同没有。 Code Contracts不使用属性的原因列在他们的常见问题

  

使用自定义属性的优点是它们根本不会影响代码。但是,使用方法调用的好处远远超过看似自然的首选属性:

     

运行时支持:不依赖于二进制重写器,在运行时无法强制使用属性表示的合同。这意味着如果您希望在运行时强制执行前提条件(或其他合同),则需要复制代码中的合同,或者在构建过程中包含二进制重写器。 Contract.RequiresAlways既可以作为声明性合同,也可以作为运行时检查验证。

     

需要解析:由于可以与自定义属性一起使用的值有限,因此条件最终会被编码为字符串。这需要定义适合所有源语言的新语言,需要解析字符串,复制编译器已经拥有的所有功能。

     

缺乏IDE支持:以字符串形式表示,不支持Intellisense,类型检查或重构,所有这些都可用于创作合同作为代码。

其他提示

Microsoft Enterprise Library具有Microsoft.Practices.EnterpriseLibrary.Validation库/命名空间,允许使用属性进行验证。

虽然Microsoft Code Contracts已暂停一段时间,但它们仍然托管在MS Research中,您无法使用配置(app.config /数据库等)来打开/关闭甚至更改规则。我的图书馆 Bouncer 确实提供了声明规则定义:源代码中的属性或实体类中规则的app.config条目/财产水平。该库是LGPL下的开源软件(您可以在商业产品中自由使用它)。如果通过app.config配置规则,则可以调整规则设置,而无需重新编译。

ASP的动态数据。 NET(和ASP.NET MVC)允许您使用属性对模型属性进行验证。

您还可以使用 postharp 并实施自己的属性进行验证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top