Eine Plugin-Klasse einen lesbaren Namen geben

8

Ich erstelle ein Plugin-System für meine Anwendung und möchte, dass die Plugins einen für Menschen lesbaren Namen bereitstellen. Die Anwendung zeigt eine Liste der verfügbaren Plugins, in dieser Liste muss der Name verfügbar sein.

Ich möchte den Entwicklern der Plugins klar machen, was sie tun müssen, damit ihre Plugins funktionieren.

Zur Zeit mache ich die Plugin-Klassen implementieren eine Schnittstelle und die Schnittstelle erfordern eine Eigenschaft "ConsumerName" implementiert werden. Dies erfordert jedoch, dass die Hauptanwendung eine Instanz jedes Plugins erstellt, um die CunsumerName-Eigenschaft zu verwenden, nur um die Liste anzuzeigen.

%Vor%

Gibt es eine Möglichkeit, die Plugins-Klassen zu zwingen, Meta-Daten zu liefern, ohne Instanzen jedes Typs zu erstellen?

Mein Fallback-Plan besteht darin, Reflektion und einige Attribute für jede Klasse zu verwenden, aber ich denke nicht, dass Attribute über Schnittstellen erzwungen werden können.

    
Peter Henell 11.03.2013, 12:32
quelle

2 Antworten

4

Nein, Attribute können nicht Teil des Vertrags für eine Schnittstelle sein. Aber sie können sehr empfohlen werden.

Was ich in der Vergangenheit getan habe, ist ein Attribut wie:

%Vor%

Wenn ein Programmierer beschließt, seine Klasse mit diesem Attribut zu dekorieren, dann ist das großartig. Wenn nicht, können Sie auf den Klassennamen selbst zurückgreifen:

%Vor%

Es sollte nicht zu viel verlangt werden, dass Plugin-Entwickler das Attribut verwenden, wenn dies dokumentiert ist.

    
ken 11.03.2013, 12:39
quelle
3

Normalerweise würde ich sagen "nein gibt es nicht". Das liegt daran, dass es zwei Mechanismen gibt, mit denen Informationen aus Typen herausgezogen werden können, ohne dass eine Instanz erstellt werden muss: static members and attributes. Da es zwischen diesen Mechanismen und Schnittstellen keine Überschneidungen gibt, können Sie nicht alle Ihre Anforderungen gleichzeitig erfüllen.

Was ist jedoch mit der attributbasierten Lösung falsch? Natürlich können Sie das Vorhandensein des Attributs nicht bei einer fehlgeschlagenen Kompilierung erzwingen, aber Sie können das tun, wenn Sie das Plugin laden (oder sogar früher).

    
Jon 11.03.2013 12:35
quelle

Tags und Links