Pergunta

Existe uma estrutura padrão (talvez parte da Enterprise Library ... ou .NET em si) que permite que você faça a validação de parâmetros comuns em atributos método?

Foi útil?

Solução

Código Microsoft , que fazem parte do .NET Framework desde 4.0 CTP e estão disponíveis para versões anteriores do .NET Framework como um pacote stand-alone, permitir que especificar suposições de codificação. Isso inclui a especificação pré-condições que pode verificar parâmetros.

Um exemplo de uso para verificação de parâmetro seria (copiado de Código documentação Contratos ):

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

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

A vantagem de usar contratos de código é que ele é uma biblioteca que será parte de futuras versões do .NET Framework, então mais cedo ou mais tarde você vai ter uma dependência menos na sua aplicação.

EDIT: Apenas notei que o seu perguntando especificamente para uma biblioteca que usa atributos para verificação de argumento ... que contratos de código não. A razão pela qual contratos de código não usa atributos está listado em sua FAQ :

A vantagem de usar atributos personalizados é que eles não têm impacto o código de todo. No entanto, os benefícios da utilização de chamadas de método superam a primeira escolha aparentemente natural de atributos:

apoio Runtime: sem depender de um banner binária, contratos expressos com atributos não pode ser imposta em tempo de execução. Isto significa que se houver pré-condições (ou outros contratos) que pretende aplicadas em tempo de execução, você precisa se quer duplicar os contratos no código ou então incluir um banner binária em seu processo de criação. Contract.RequiresAlways serve tanto como um contrato declarativa e como uma validação verificou-tempo de execução.

Necessidade de análise: Uma vez que os valores que podem ser usados ??com atributos personalizados são limitadas, condições acabam sendo codificados como strings. Isto exige a definição de uma nova linguagem que é apropriado para todos os idiomas de origem, requer as strings a serem analisados, duplicar toda a funcionalidade do compilador já possui.

Falta de apoio IDE: Expresso como cordas, não há suporte para Intellisense, verificação de tipo, ou refatoração, todos os quais estão disponíveis para a criação de contratos como código.

Outras dicas

A Enterprise Library Microsoft tem a biblioteca Microsoft.Practices.EnterpriseLibrary.Validation / namespace que permite atributos de validação usando.

Enquanto contratos de código Microsoft estão fora por um tempo, eles ainda são hospedados em MS Research e você não pode usar a configuração (config / banco de dados etc.) para ligar / desligar ou regras muda mesmo. Minha biblioteca Bouncer fornece definição da regra declarive: atributos em entradas do código-fonte ou app.config para regras na classe de entidade nível / propriedade. A biblioteca é opensource sob a LGPL (você pode livremente usá-lo em produtos comerciais). Se você configurar as regras via app.config você pode ajustar as configurações da regra, sem a necessidade de uma recompilação.

Dynamic Data para ASP. NET (e ASP.NET MVC) permite fazer a validação para Propriedades modelo usando atributos.

Você também pode usar PostSharp e implementar seus próprios atributos para validação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top