Bon, va sans dire que cette question s’addresse tout particulièrement a notre cher gloppy.
Le Tzim, il aimerais faire un programme a plug-ins, l’objet aidant cela… Par exemple mon prog utilise un objet dérivé de StrucDePlug.
Comment faire, pour que au démarrage de l’appli, le prog cherche l’ensemble des objets dérivés de StrucDePlug dans les assemblies du rep de l’appli, en affiche la liste, et permette d’en instancier un dynamiquement ?
Si si c’est tres clair. Ben deja tu veux que ton “API” de plug in ca marche avec des interfaces. Ensuite tu veux utiliser les classes de reflection qui sont super simples a utiliser. Tu peux utiliser les classes “assembly” et autres. Si tu veux faire vraiment couillu tu peux regarder la classe TypeDescriptor apres qui permet d’attacher des informations a une classe sans que celle ci les implemente vraiment et qui peut aussi servir a d’autres concepts avances dont on pourra parler sur IRC si tu veux. Si tu as besoin de plus de details hesite pas je te ferais un petit exemple…
Un exemple pour montrer que c’est simple:
//Load the Assembly
Assembly a = Assembly.LoadFrom(filename);
// get all the types in the loaded assembly
Type[] types = a.GetTypes();
foreach (Type typ in types)
{
// dynamically create or activate(if exist) object
object obj = Activator.CreateInstance(typ);
}
De ce que j’ai déjà vu dans plusieurs logiciels de ce genre, la classe de base des plug-ins définit une méthode abstraite qui permet de s’instancier (genre Create()). Il suffit ensuite de l’implémanter cette méthode par ton plug-in.
class MyPlugin : public CPlugin
{
public CPlugin Create()
{
return new MyPlugin();
}
}