2008-10-07 9 views
21

Was ist der Standard für die Zulassung und Implementierung eines Plugin-Systems für Ihre Anwendung?Design Pattern zur Implementierung von Plugins in Ihrer Anwendung?

In meiner letzten Anwendung habe ich eine einfache Schnittstelle für alle Plugins, die sie implementieren müssen. Ich lade dann alle Assemblys im apps-Verzeichnis und wähle alle aus, die diese Schnittstelle nicht implementieren.

Eine der Methoden in der Schnittstelle ist eine DoWork() -Methode, die in regelmäßigen Abständen für alle geladenen Assemblys aufgerufen wird, um die Aktionen der Plugins auszuführen.

Was ist der "richtige" Weg, um ein Plugin-System zu machen? Erstellen Sie einfach ein Interface für Plugins? Sollten Sie regelmäßig eine bestimmte Methode in allen Plugins aufrufen? Gibt es einen ausgefeilteren Weg?


EDIT:

Danke Matt Hamilton für den Verweis auf die System.AddIn Namespace. Dies wird wahrscheinlich die Art sein, wie ich meine Plugins implementiere. Allerdings bin ich immer noch neugierig auf Plugin-Architektur im Allgemeinen und würde nichts dagegen haben, einige Hintergrundinformationen über die beste Art und Weise, sie sollten entworfen werden, implemented .. wie sollten Sie sie einmal geladen, etc.

Antwort

9

Überprüfen Sie das System. AddIn Namespace nach this response zu einer ähnlichen Frage.

5

Glenn-Block und Brad Abrams bei Microsoft haben vor kurzem die Managed Extensibility Framework veröffentlicht, bietet ein Rahmen für den Umgang mit genau dem, worüber Sie sprechen.

Die Dokumentation und der Download sind verfügbar here.

Glenn's und Brad's Blogs sind auch große Ressourcen für MEF.

4

Von einem streng Design-Muster Perspektive, können Sie einen Blick auf OSGi werfen (das ist sehr Java-orientiert, aber gilt als eine sehr, sehr gute Plugin/Modul-System). Könnte Overkill sein für das, was Sie erreichen wollen, aber es gibt eine Los von wirklich guten Sachen drin über, wie man mit dem Laden und Entladen von Modulen dynamisch in der Mitte eines Laufs, etc ...