Passage ToolStripMenuItem entre différent AppDomain
Bonjour à tous,
Je souhaiterais pouvoir passer un object ToolStripMenuItem d'un domaine à l'autre. Lors de la récupération de celui-ci tout va bien à prioris mais lors de l'utilisation j'obtient cette erreur:
Citation:
Une exception non gérée du type 'System.Runtime.Serialization.SerializationException' s'est produite dans System.Windows.Forms.dll
Informations supplémentaires : Le type 'System.Windows.Forms.PropertyStore' dans l'assembly 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' n'est pas marqué comme sérialisable.
Je vais quand même vous expliquez mon objectif et comment je l'effectue.
Tout d'abord j'ai 3 classes dans 2 projets différents.
Dans le projet principal j'ai une classe toute simple qui n'est rien d'autre qu'un formulaire winforms qui va créer un nouveau AppDomain et charger dans celui-ci une classe Loader. La classe Loader va me servir à charger une dll externe (un plugin) qui contient la 3ème classe se trouvant dans le second projet.
Dans ce second projet la classe a 2 fonctions:
- Retourner le nom du plugin (qui en réalité est un champs)
- Retourner un objet menu
et utilise également l'interface IPlugin
Pour faire fonctionner tout ça, toutes les classes se trouvant dans le nouveau AppDomain sont dérivée de MarshalByRefObject qui est obligatoire (sauf si on sérialise mais chez moi cella ne fonctionne pas).
La classe Loader contient également une fonction LoadPlugin qui renvoie une interface IPlugin.
Lorsque dans mon formulaire principal j'effectue ce code:
Code:
1 2 3 4 5
| IPlugin plugin = Loader.LoadPlugin("pluginName");
string name = plugin.Name; // fonctionne
MessageBox.Show("Plugin name: " + name); // fonctionne
ToolStripMenuItem mnu = plugin.GetMenu(); // fonctionne (je ne suis pas sur de recevoir un object correct mais la ligne de code fonctionne)
MenuStrip1.DropDownItems.Add(mnu); // sur cette ligne-ci l'erreur ci-dessus s'affiche |
Merci d'avance pour votre aide
Bonne journée