C# et liaison dynamique Tardive

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 ?

Je sais pas si je suis très clair ici…

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);
}


Par exemple…

Ce message a été édité par GloP le 25/06/2003

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(); } }
Mais bon c'est plus orienté C++ que c#.

Quelques pointeurs vers des architectures de plug-ins: http://blog.monstuff.com/archives/000049.html 

++
Dumky