J'expérimente avec une architecture de plug-in pour le système commercial interne de mon entreprise. J'ai réussi à lire tous les fichiers .DLL dans un dossier Plugin qui implémente une interface spécifique. Ce que j'essaie de comprendre, c'est la meilleure méthode de communication entre l'application mère MDI "hôte" et les formulaires qui seront dans les fichiers .DLL que j'ai l'intention de créer des enfants MDI.Architecture Plugin - Faire un formulaire parent MDI Conscient des enfants dans DLLs
Actuellement, je reviens juste des objets ToolStripMenuItem des DLLs ajouter au parent MDI. J'ai également testé que les événements câblés dans les fichiers .DLL à ToolStripMenuItems se propagent au code dans les fichiers .DLL. J'ai également réussi à renvoyer un objet Form via l'interface et à ouvrir ce formulaire, car le dossier Plugin est "scanné".
Cependant, je ne suis pas certain que je ferais ces formes enfants MDI. En outre, toutes les autres formes vivant dans les .DLL devront également être des enfants MDI. J'ai créé un projet VS 2008 Addin juste pour voir ce qui se passe, et il semble que l'Addin accepte un objet Application sur lequel il ajoute à ToolStripMenuItems et effectue d'autres opérations. Le code pour construire le menu dans le fichier .DLL. C'est à l'opposé de ce que j'ai fait jusqu'ici, où le MDI demande un ToolStripMenuItem de chaque .DLL et ajoute l'objet retourné à son propre menu.
Est-ce que la conception de mon architecture de plugin pour accepter un objet d'application de la même manière la seule façon que je pouvais obtenir des formulaires pour ouvrir comme un enfant MDI? Est-ce que je demande d'autres maux de tête, actuellement inconnus, en ne passant PAS l'objet application au fichier .DLL?
Je suis intéressé à faire quelque chose de similaire. Avez-vous déjà eu ce travail? Je ne sais pas comment faire pour que le formulaire hôte surveille un dossier, et une fois qu'il le fait, comment l'obtenir pour vérifier la bonne interface pour ajouter un plugin. Cela vous dérangerait-il de poster si ce n'est un lien vers votre code, alors peut-être un peu d'exemple de code pour savoir comment ça fonctionne? –