Erweiterbare Anwendungen mit Addins

Posted October 8, 2007

Im Moment gibt es den Trend, Anwendungen mithilfe von Plug-ins bzw. Add-ons bzw. Add-ins erweiterbar zu machen. Dabei gibt es natürlich viele verschiedene Ansätze und Frameworks. Wer im .NET Bereich allerdings keine Software einkaufen möchte, der wird auf das freie Mono.Addins treffen und auch auf das im .NET Framework 3.5 enthaltene System.Addin zurückgreifen.

Aus der Sicht des Hosts - also des festen Kerns der Anwendung - sehen die beiden Frameworks relativ ähnlich aus, allerdings funktioniert die Addin-Verwendung intern komplett anders.

System.AddinMono.Addins
VorteileEs ist möglich Addins wieder zu entladen und somit auch zur Laufzeit zu ersetzen, ohne das der Host es überhaupt merkt. Durch Entkoppelung können Änderungen am Host oder auch an den Addins durchgeführt werden, ohne dass die Addins oder Hosts neugebaut werden müssen.Extrem einfache Architektur: Eine gemeinsam definierte Schnittstelle wird direkt vom Addin implementiert und vom Host genutzt. Die Addins liegen in derselben AppDomain und können somit wie ganz normale Objekte verwendet werden.
NachteileEs wird eine 'Pipeline' benötigt, sodass für jeden gemeinsam genützten Typ eine Version auf dem Host, eine Version für die Addins, ein gemeinsamer 'Contract', sowie vier Adapter-Klassen geschrieben werden müssen.Es ist nicht möglich ein geladenes Addin wieder zu entladen. Somit muss bei jeder Aktualisierung eines Addins die Anwendung neugestartet werden.
BeispieleExtensibleCalculatorWriterService

(originally posted on 2007-10-09)