Domanda

Esiste un framework standard (forse parte di Enterprise Library ... o .NET stesso) che consente di eseguire la convalida dei parametri comuni negli attributi del metodo?

È stato utile?

Soluzione

Contratti di codice Microsoft , che fanno parte di .NET Framework dal 4.0 CTP e sono disponibili per le versioni precedenti di .NET Framework come pacchetto autonomo, consentono di specificare ipotesi di codifica. Ciò include la definizione di pre-condizioni che possono verificare i parametri.

Un esempio di utilizzo per il controllo dei parametri sarebbe (copiato da Documentazione sui contratti di codice ):

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

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

Il vantaggio dell'uso di Code Contracts è che è una libreria che farà parte delle future versioni di .NET Framework, quindi prima o poi avrai una dipendenza in meno nella tua applicazione.

EDIT: Ho appena notato che stai specificatamente richiedendo una libreria che utilizza gli attributi per la verifica degli argomenti ... che Contratti di codice non lo fanno. Il motivo per cui Code Contracts non utilizza gli attributi è elencato nelle loro FAQ :

  

Il vantaggio dell'utilizzo di attributi personalizzati è che non influiscono affatto sul codice. Tuttavia, i vantaggi dell'utilizzo delle chiamate di metodo superano di gran lunga la prima scelta apparentemente naturale di attributi:

     

Supporto runtime: Senza dipendere da un riscrittore binario, i contratti espressi con attributi non possono essere applicati in fase di runtime. Ciò significa che se ci sono condizioni preliminari (o altri contratti) che si desidera applicare in fase di esecuzione, è necessario duplicare i contratti nel codice oppure includere un riscrittore binario nel processo di compilazione. Contract.RequiresAlways serve sia come contratto dichiarativo che come validazione controllata in fase di esecuzione.

     

Necessità di analisi: poiché i valori che possono essere utilizzati con attributi personalizzati sono limitati, le condizioni finiscono per essere codificate come stringhe. Ciò richiede la definizione di una nuova lingua che sia appropriata per tutte le lingue di origine, che richieda l'analisi delle stringhe, duplicando tutte le funzionalità che il compilatore possiede già.

     

Mancanza di supporto IDE: espresso come stringhe, non esiste supporto per Intellisense, controllo del tipo o refactoring, tutti disponibili per la creazione di contratti come codice.

Altri suggerimenti

La libreria Microsoft Enterprise ha la libreria / spazio dei nomi Microsoft.Practices.EnterpriseLibrary.Validation che consente la convalida utilizzando gli attributi.

Sebbene i Contratti Microsoft Code siano in sospeso da un po ', sono ancora ospitati in MS Research e non è possibile utilizzare la configurazione (app.config / database ecc.) per attivare / disattivare o persino modificare le regole. La mia libreria Bouncer fornisce una definizione di regola dichiarativa: attributi nel codice sorgente o voci app.config per le regole della classe entità / livello di proprietà. La libreria è opensource sotto LGPL (puoi usarla liberamente nei prodotti commerciali). Se configuri le regole tramite app.config puoi modificare le impostazioni delle regole senza la necessità di ricompilare.

Dynamic Data per ASP. NET (e ASP.NET MVC) consente di eseguire la convalida per le proprietà del modello utilizzando gli attributi.

Puoi anche utilizzare postsharp e implementare i tuoi attributi per la validazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top