Reale Verwendung von benutzerdefinierten .NET-Attributen

8

Für welche Dinge haben Sie benutzerdefinierte .NET-Attribute in der realen Welt verwendet?

Ich habe mehrere Artikel über sie gelesen, aber ich habe nie benutzerdefinierte Attribute verwendet.

Ich habe das Gefühl, dass ich sie übersehen könnte, wenn sie nützlich sein könnten.

Ich spreche über Attribute, die Sie erstellen, und nicht über solche, die bereits im Framework enthalten sind.

    
Dana Holt 21.06.2009, 04:13
quelle

7 Antworten

4

Ich habe sie "benutzerdefinierte" Attribute für die Validierung verwendet (dh ein Feld markiert, das mit meiner eigenen "Kreditkartenvalidierung" validiert werden soll) und benutzerdefinierte LinqToLucene-Analysatoren, die ich geschrieben habe (dh gegebenes Feld).

Der Validierungscode würde beispielsweise so aussehen:

%Vor%

Wenn das obige Objekt validiert wird, wird jedes Feld dank des Attributs "custom" mit dem entsprechenden Validator validiert.

In den LinqToLucene-Sachen, die ich geschrieben habe, sind benutzerdefinierte Attribute schön, weil sie es Ihnen ermöglichen, bestimmte Felder zur Laufzeit durch Reflexion zu finden. Wenn Sie beispielsweise ein Kundenobjekt haben, sind Sie möglicherweise daran interessiert, alle Eigenschaften zu erhalten, die als "index me" markiert wurden: Ein benutzerdefiniertes Attribut ermöglicht Ihnen dies, da Metadaten über das Objekt in einer Weise verfügbar gemacht werden ist leicht abzufragen.

    
Esteban Araya 21.06.2009, 04:45
quelle
5

Ich habe eine Skript-Engine erstellt und verschiedene Methoden mit dem [Command] -Attribut gekennzeichnet. Dies bedeutete, dass diese Funktionen der Scripting-Engine ausgesetzt waren.

Beispiel:

%Vor%

Und wie gewohnt:

%Vor%     
abelenky 21.06.2009 04:50
quelle
1

Unter anderem habe ich sie verwendet, um EBNF anzugeben, das zur Laufzeit gelesen wird, um benutzerdefinierte Parser im laufenden Betrieb zu erstellen und Metadaten über Felder für eine Datenbank anzugeben.

Ich finde ein "Muster", das ich häufig mit benutzerdefinierten Attributen verwende, um Enums zu ersetzen, besonders wenn eine Abhängigkeit von der Enumeration in den verschiedenen Stellen im Code besteht.

z. Ich könnte einen Zustand für einen Gegenstand haben. Basierend auf diesem Zustand habe ich vielleicht 3 oder 4 verschiedene Stellen im Code, mit denen ich die Enumeration wechseln und eine Operation ausführen würde. Ein anderer Entwickler könnte leicht einen Fehler einführen, indem er eine neue enum hinzufügt, aber nicht in einer der switch -Anweisungen irgendwo anders im Code behandelt.

Um dies zu vermeiden, erstelle ich ein benutzerdefiniertes Attribut, das für eine statische Klasse deklariert ist. Die benutzerdefinierten Attribute werden im statischen Konstruktor der Klasse in ein Dictionary geladen, und alle Stellen im Code verwenden das Wörterbuch anstelle von switch-Anweisungen. Der benutzerdefinierte Attributkonstruktor enthält die 'hartcodierten' Werte für jede switch-Anweisung.

    
Fung 21.06.2009 04:46
quelle
0

Ich musste einige Objekte in ein benutzerdefiniertes (Legacy-) Format serialisieren und Attribute verwenden, um zu identifizieren, welche Felder serialisiert werden sollten und wie sie formatiert werden. Dann hatte ich einen Serialisierer, der jedes Objekt mit diesen Attributen aufnehmen und mit Reflektion formatieren konnte.

    
Robert 21.06.2009 04:24
quelle
0

Ich habe bisher noch keine Verwendung für benutzerdefinierte Attribute gefunden. Es gab ein paar Situationen, in denen ich dachte, dass sie angemessen sind, aber sie nicht verwendet haben, weil das Nachdenken über das Lesen von benutzerdefinierten Attributen offensichtlich ziemlich teuer ist.

    
Crippledsmurf 21.06.2009 09:16
quelle
0

Ich habe benutzerdefinierte Attribute für Klassen in "Plug-in" -DLLs platziert. Dies ermöglicht es einem Framework, verfügbare Plug-Ins dynamisch zu erkennen, zu evaluieren, ob sie von Interesse sind, und dann dynamisch diejenigen zu laden, die von Interesse sind.

In unserem Beispiel sind dies Plug-ins, die bestimmte Fahrzeuge innerhalb einer Familie modellieren. Ein Plug-in für eine Fahrzeugfamilie könnte tatsächlich mehrere Fahrzeugmodelle innerhalb der Fahrzeugfamilie modellieren (z. B. "MX-6", "Probe"). Wenn eine ID oder ein Modellname als benutzerdefiniertes Attribut-Array enthalten ist, können wir alle DLLs, die nicht einmal über benutzerdefinierte Attribute verfügen, schnell ignorieren und dann alle ignorieren, die das gewünschte Fahrzeug nicht modellieren.

    
e-holder 28.10.2009 19:44
quelle
0

Ich hatte es in einem der ORM-Frameworks verwendet, die ich basierend auf dem ActiveRecord-Muster entwickelt hatte. Dies ist die gleiche Art von Implementierung, die in LINQ, Castle Projekt usw. verfügbar ist.

Das Framework wurde "SkyFramework" genannt, aber es war kein OpenSource.

für z.B. Nur ein grobes Beispiel ...

Ähnliche Beispiele finden Sie auch in anderen Opensource-Projekten.

%Vor%

HINWEIS: Das Attribut "Tabelle", "Spalten" waren die benutzerdefinierten Attribute zu diesem Zeitpunkt.

Die ActiveRecord-Engine analysiert das Objekt nach diesen Attributen und generiert die entsprechenden Funktionen für CRUD ... etc ...

Ebenso hatte ich einige benutzerdefinierte Attribute entwickelt, um Codeabschnitte zu identifizieren, die bewertet werden müssen ... z. B. ..

%Vor%

Die mit den oben genannten Attributen markierten Methoden werden automatisch benchmarkiert und ein Protokoll generiert. Dies waren einige frühere Implementierungen.

Es gibt ein Apress-Buch zum Thema .. Angewandte .NET-Attribute , die Ihnen helfen können.

    
rajesh pillai 21.06.2009 04:41
quelle