2009-06-01 4 views
0

Gibt es eine Möglichkeit, einer Instanz einer Klasse von einer dynamisch geladenen Assembly zu erlauben, ein Formular anzuzeigen?Dynamisch geladene Baugruppe mit Formular?

Ich habe dieses Plugin-System, das Baugruppen in separaten Domänen lädt (um sie bei Bedarf zu entladen). Diese Assemblys könnten Einstellungen haben, und ich hatte gehofft, ich könnte jede Assembly ein Formular für den Endbenutzer präsentieren lassen, um sie bearbeiten zu können. Jede Erweiterung in einer Assembly muss nur eine spezielle Schnittstelle implementieren. Wenn ich jedoch das Formular aus meiner Plugin-Manager-Klasse zeige, bekomme ich eine Ausnahme, dass die Form-Klasse nicht serialisierbar ist. Abgesehen von der Ableitung von Form und der Implementierung von ISerializable selbst, gibt es einen anderen Weg, dies zu tun?

Tx für irgendwelche Hinweise, Tipps und (hoffentlich: D) Lösungen! ... Arjan ...

Antwort

0

Das Serialisierungsproblem liegt daran, dass die Form-Klasse nicht Marschall als Referenz ist und Sie versuchen, eine Methode für die Klasse über Domänen hinweg aufzurufen. Wenn das einzige Formular, das angezeigt werden muss, Benutzereinstellungen sind, sollten Sie besser eine Art von "Einstellungen" -Klasse definieren, die zwischen den Plugins übergeben wird.

+0

Paul, danke für Ihre Antwort. Aber obwohl dies eine Lösung sein könnte, muss ich der Tatsache entgegenwirken, dass diese Formulare Logik enthalten, die nicht einfach mit einer Settings-Klasse übertragen werden können. Die Erweiterungen/Plugins sind nicht vollständig unter meiner Kontrolle und können von Dritten entwickelt werden ... –

+0

Die andere Option ist dann, dem Plugin in der anderen AppDomain zu signalisieren, dass es das Formular anzeigen muss und es niemals einen Verweis an es gibt diese Form zurück in die aufrufende Domäne. Es kann ein DialogResult übergeben, um den Erfolg oder das Fehlschlagen des Formulars anzuzeigen. –