Frage

Gibt es einen Standard-Framework (vielleicht Teil der Enterprise Library ... oder .NET selbst), die Sie gemeinsam Parametervalidierung in Methode zu tun erlaubt Attribute?

War es hilfreich?

Lösung

Microsoft-Code Contracts , der Teil von .NET Framework ist seit 4.0 CTP und sind für frühere Versionen von .NET Framework als Stand-alone-Paket verfügbar, erlaubt Codierung Annahmen zu spezifizieren. Dazu gehören Voraussetzungen anzugeben, die Parameter überprüfen.

Ein Beispiel für die Parameterprüfung verwenden würde von Code-Verträge Dokumentation ):

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

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

Der Nutzen-Code Verträge ist, dass es eine Bibliothek, die Teil der künftigen .NET Framework Versionen sein wird, so früher oder später werden Sie in Ihrer Anwendung eine Abhängigkeit weniger haben.

EDIT: habe gerade bemerkt, dass Ihr für eine Bibliothek speziell zu stellen, die Attribute für Argument Überprüfung ... dass Code Verträge verwendet nicht. Der Grund, warum-Code Verträge nicht Attribute verwenden, aufgeführt in ihrem FAQ :

  

Der Vorteil von benutzerdefinierten Attributen ist, dass sie nicht auf den gesamten Code auswirken. Allerdings ruft die Vorteile Verfahren zur Verwendung bei weitem die scheinbar natürliche erste Wahl der Eigenschaften überwiegen:

     

Runtime-Unterstützung: auf einem binären rewriter Ohne abhängig, mit Attributen ausgedrückt Verträge nicht zur Laufzeit durchgesetzt werden. Das bedeutet, dass, wenn es Voraussetzungen (oder andere Verträge), die Sie zur Laufzeit erzwungen werden sollen, müssen Sie entweder die Verträge im Code duplizieren oder auch ein binäres rewriter in Buildprozess umfassen. Contract.RequiresAlways dient sowohl als deklarativen Vertrag und als Runtime-geprüft Validierung.

     

Need für Analyse: Da die Werte, die mit benutzerdefinierten Attributen sind begrenzt verwendet werden können, die Bedingungen am Ende als Strings codiert werden. Dies erfordert eine neue Sprache definieren, die für alle Quellsprachen geeignet ist, erfordert die Saiten analysiert werden, die gesamte Funktionalität zu duplizieren der Compiler bereits besitzen.

     

Mangel an IDE-Unterstützung: als Strings ausgedrückt, gibt es keine Unterstützung für Intellisense, Typprüfung oder Refactoring, die alle für die als Code Verträge Authoring zur Verfügung stehen.

Andere Tipps

Die Microsoft Enterprise Library hat die Microsoft.Practices.EnterpriseLibrary.Validation Bibliothek / Namespace, die Attribute Validierung verwendet werden kann.

Während Microsoft-Code Verträge sind für eine Weile, sind sie immer noch in MS-Forschung gehostet und Sie können nicht verwenden Konfiguration (app.config / Datenbank etc.) ein- / ausschalten oder sogar Regeln ändern. Meine Bibliothek Bouncer tut declarive Regeldefinition liefern: Attribute in Quellcode oder app.config Einträge für Regeln in der Entity-Klasse / Objektebene. Die Bibliothek ist Open Source unter der LGPL (Sie frei es in kommerziellen Produkten verwendet werden können). Wenn Sie die Regeln konfigurieren über app.config Sie die Regeleinstellungen, ohne die Notwendigkeit eines recompile anpassen können.

Dynamic Data für ASP. NET (und ASP.NET MVC) können Sie tun Validierung für Modell-Eigenschaften mithilfe von Attributen.

Sie können auch Postsharp und eigene Attribute für die Validierung implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top