Je suis un peu nouveau pour C# .Net et je jouis le processus d'apprentissage! En ce moment je travaille sur un projet (juste pour apprendre) dans lequel les plug-ins sont la clé principale.Aidez-moi s'il vous plaît avec l'écriture d'un plug-in en C# qui exporte est sur laisser dire Config GUI
j'ai fait ce qui suit jusqu'à présent qui semble fonctionner très bien:
Interface:
namespace My.test
{
public interface IMyPlugin
{
bool Execute(string Id, Object param);
List<string> GetPluginIdList();
}
}
un plug-in test de mise en œuvre IMyPlugin Interface:
using System;
..
..
using My.test;
namespace demoplg
{
public class SamplePlugIn: IMyPlugin
{
public bool Execute(string Id, object param)
{
MessageBox.Show(Id, "SamplePlugIn");
return false;
}
public List<string> GetPluginIdList()
{
List<string> result = new List<string>();
result.Add("test1");
result.Add("test2");
return result;
}
}
}
et dans l'application principale (Host) J'utilise Réflexions pour charger la DLL (assemblage) et créer une instance de plug-in.
try
{
Type[] types = PlugIn.GetTypes();
Type MyPlugInType = null;
foreach (Type libtype in types)
{
//check if it implements the IMyPlugin.
Type[] interfacelist = libtype.GetInterfaces();
foreach (Type lookupInf in interfacelist)
{
if (lookupInf.Name.Equals("IMyPlugin"))
{
MyPlugInType = libtype;
break;
}
}
if (MyPlugInType == null) continue;
IMyPlugin xplg = null;
ConstructorInfo ci = MyPlugInType.GetConstructor(new Type[] { });
xplg = ci.Invoke(null) as IMyPlugin;
return xplg;
}
return null;
}
catch
{
return null;
}
bien, maintenant ce que je veux avoir est qu'un plug-in peut avoir est sur l'interface graphique de configuration, que je voudrais ajouter que dans mon hôte (application principale) en appelant quelque chose par exemple: xplg.RegisterPluginGUI(); Disons quelque chose sous la forme d'une arborescence sur le côté gauche montrant le nom/la description du plug-in, et sur le côté droit d'un conteneur où je peux déposer l'interface utilisateur du plug-in dessus.
peut quelqu'un s'il vous plaît donner quelques conseils comment atteindre cet objectif?
Eh bien, j'ai fait quelque chose de similaire dans Delphi qui n'est pas un travail très propre ;-) Utiliser l'API WIN pour traiter les messages d'un à partir d'un dll mis en cache dans le formulaire principal !!!
Merci d'avance! AK
En passant, regardez dans le cadre de Mono.Addins. Ils ont un système facile pour enregistrer des plugins, cela vous évitera de chercher en utilisant la réflexion pour les implémentations de vos interfaces. Croyez-moi, ce que vous faites maintenant sera douloureux si vous commencez à créer plus d'interfaces de plugin. –
Merci pour votre indice! – Gohlool