2008-09-26 6 views
7

Существует ли стандартная структура (возможно, часть самой Enterprise Library ... или сама .NET), которая позволяет выполнять общую проверку параметров в атрибутах метода?Существует ли стандартная среда для проверки параметров .NET, которая использует атрибуты?

ответ

4

Microsoft Code Contracts, которые являются частью .NET Framework с 4.0 CTP и доступны для более ранних версий .NET Framework в виде автономного пакета, позволяют указывать предположения о кодировании. Сюда входит указание предварительных условий, которые могут проверять параметры.

Пример использование для проверки параметров будет (копируется из Code Contracts documentation):

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

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

Преимущества использования коды контрактов является то, что это библиотека, которая будет частью будущих релизов .NET Framework, так что рано или позже у вас будет меньше зависимости от вашего приложения.

EDIT: Только что заметил, что вы специально запрашиваете библиотеку, которая использует атрибуты для проверки аргументов ... что в контрактах кода нет. Причина, почему контракты код не использует атрибуты перечислены в их FAQ:

Преимущество использования пользовательских атрибутов является то, что они не влияют на код вообще. Однако преимущества использования метода требует намного перевешивают, казалось бы, естественный первый выбор атрибутов:

Продолжительность поддержки: Вне зависимости от бинарной Rewriter, контракты, выраженные с атрибутами не может быть приведено в исполнение во время выполнения. Это означает, что если есть предварительные условия (или другие контракты), которые вы хотите применить во время выполнения, вам нужно либо дублировать контракты в коде, либо включить в процесс сборки двоичный перезаписыватель. Contract.RequiresAlways служит как декларативный контракт, так и как проверенная временем проверка.

Потребность в разборе: Поскольку значения, которые могут использоваться с пользовательскими атрибутами, ограничены, условия в конечном итоге кодируются как строки. Это требует определения нового языка, который подходит для всех исходных языков, требует, чтобы строки обрабатывались, дублируя все функциональные возможности, которыми обладает компилятор.

Отсутствие поддержки IDE: Выраженные в виде строк, нет поддержки Intellisense, проверки типа или рефакторинга, все из которых доступны для создания контрактов в качестве кода.

+0

хорошие пункты re: attributes – 2010-03-13 20:09:47

1

Dynamic Data для ASP.NET (и ASP.NET MVC) позволяет выполнять проверку свойств модели с использованием атрибутов.

7

Библиотека Microsoft Enterprise имеет библиотеку Microsoft.Practices.EnterpriseLibrary.Validation/пространство имен, которое позволяет проверять использование атрибутов.

+1

Спасибо !!!! <- несколько! из-за требования 10 символов :) – 2008-09-26 08:01:08

1

Вы также можете использовать postsharp и реализовать свои собственные атрибуты для проверки.

2

Хотя контракты Microsoft Кодовые на некоторое время, они по-прежнему размещены в MS Research, и вы не можете использовать конфигурацию (app.config/базы данных и т.д.) в включать/выключать или даже изменять правила. Моя библиотека Bouncer действительно содержит определение декларативного правила: атрибуты в исходном коде или приложении.config для правил на уровне сущности/уровне собственности. Библиотека открыта в рамках LGPL (вы можете свободно использовать ее в коммерческих продуктах). Если вы настраиваете правила через app.config, вы можете настроить параметры правила без необходимости перекомпиляции.