Vor ein paar Tagen habe ich die Bibliothek Mono.Addins gefunden, mit der man erweiterbare Anwendung schreiben kann. Das Konzept dahinter ist stark dem Kern von SharpDevelop angelehnt.
Man hat ebenfalls einen Addin-Tree, der alle sogeannten Extension Points enthält. Dies sind die Punkte im Baum, an denen man sich als Addin einklicken kann. Beispielsweise könnte dies der Baumpfad “\Menu\File\” sein. Ein Addin würde nun innerhalb einer XML-Manifest-Datei eigene Knoten (Extension Nodes) zu diesem Pfad hinzufügen und sich somit bei der Anwendung registrieren. Beim Start der Anwendung werden alle Manifest-Dateien aller Addins eingelesen und zu einem gemeinsamen Baum zusammengefasst. Bei diesem Beispiel würden nun alle Einträge aus dem Pfad “\Menu\File” ausgelesen werden und auf Basis dieser Daten würde das Menü erzeugt werden.
Insgesamt ist Mono.Addins etwas “sauberer” programmiert als der Kern von #Develop. Es gibt keine festen Verweise zu log4net oder z.B. zu WindowsForms. Möchte man Features wie das Logging eingebaut haben, kann man diese später noch mit Hilfe von Interfaces innerhalb von Mono.Addins integrieren. Die Bibliothek ist außerdem auch portabel und daher genauso gut für Linux wie für Windows geeignet.
Eine exzellente Referenz befindet sich auf der Mono-Seite hier. Übrigens kann man in Mono.Addins auch fast alles, was man über XML-Dateien beschreibt, auch über Attribute im Code regeln. Eine weitere interessante Option (und auch meine bevorzugte) ist das Integrieren der XML-Beschreibung in die Assembly als eingebettete Ressource.