In meiner Diplomarbeit hatte ich ein einfaches Pluginframework umgesetzt welches per Reflection eine Assembly nach einem bestimmten Interface durchsucht, um dann die entsprechende Klasse mit Hilfe des Activators zu instantiieren. Nachteil an dieser sehr geläufigen Lösung ist vor allem, der zunehmende Speicherverbrauch da die geladenen Plugins nicht entladen werden können. Denn ist eine Assembly einer Application Domain einmal hinzugefügt wird man diese zur Laufzeit nicht mehr los.
Als Lösung wird im Netz deshalb vorschlagen jedes Plugin in einer eigenen Application Domain laufen zu lassen und die entsprechenden Dienste per Remoting zu synchronisieren. Wie das genau geht, konnte mir bisher aber keiner erklären - vielleicht hätte ich auch gründlicher suchen sollen… Nun habe ich mich wieder mit den Themen Marshalling, Remoteing und Application Domains auseinander gesetzt und siehe da, ich bin auf eine Lösung für mein altes Problem gestoßen: klick.
Kommentare