2009-06-01 5 views
0

Est-il possible d'autoriser une instance d'une classe d'un assembly chargé dynamiquement à afficher un formulaire?Assemblage dynamiquement chargé montrant la forme?

J'ai ce système de plugin qui charge des assemblages dans des domaines séparés (pour les décharger si nécessaire). Ces assemblages pourraient avoir des paramètres, et j'espérais que chaque assembly présenterait un formulaire à l'utilisateur final pour permettre de les éditer. Chaque extension d'un assembly doit implémenter une interface spéciale juste pour cela. Cependant, en affichant le formulaire de ma classe de gestionnaire de plugins, j'obtiens une exception que la classe Form n'est pas sérialisable. Hormis dériver de Form et implémenter ISerializable moi-même, existe-t-il un autre moyen de le faire?

Tx pour toutes les astuces, conseils, et (espérons: D) des solutions! ... Arjan ...

Répondre

0

Le problème de sérialisation est dû au fait que la classe Form n'est pas Marshal par référence et que vous essayez d'invoquer une méthode sur la classe à travers les domaines. Si la seule forme qu'ils doivent montrer est pour les paramètres utilisateur, vous pourriez être mieux de définir une sorte de classe "paramètres" qui est passée entre les plugins.

+0

Paul, Merci pour votre réponse. Mais bien que cela puisse être une solution, je dois contrer le fait que ces formulaires peuvent contenir une logique qui n'est pas facilement transférée en utilisant une classe Settings. Les extensions/plugins ne sont pas totalement sous mon contrôle, et peuvent être développés par des tiers ... –

+0

L'autre option est alors de signaler au plugin dans l'autre AppDomain qu'il doit montrer le formulaire et qu'il ne passe jamais une référence à cette forme de retour au domaine appelant. Il peut passer un DialogResult pour indiquer le succès ou l'échec du formulaire. –

Questions connexes