C'est un petit moteur de gestion de plugins qui permet de :
- Charger/décharger à chaud les plugins
- Rechercher les plugins dans les assembly
- Gérer un niveau de sécurité réduit pour les plugins
- Catégoriser les plugins (via des attributs)
- Redémarrage d'un plugin en cas de plantage de celui-ci
Pour définir une classe comme étant un plugin, il faut qu'elle hérite de ClsPluginBase (ou ClsThreadPluginBase si c'est un nouveau Thread), et qu'elle soit tagguée avec un attribut dérivant de PluginAttribute (ou PluginAttribute si vous n'avez pas de catégories).
Ensuite, vous devez instancier un ClsPluginHostGeneric en spécifiant quel type de PluginAttribute (de catégorie) il doit gérer.
Vous pouvez énumérer les plugins disponibles dans un assembly via la fonction GetPlugins(string assembly).
Après, vous lancez un plugin avec LoadAndInitPlugin() en spécifiant quel plugin instancier, et vous obtenez l'instance du plugin. Libre à vous d'en faire ce que vous voulez (Start, Stop...).
Pour décharger un plugin, vous devez appeller UnloadPlugin() avec l'instance du plugin à décharger.
Un plugin qui crée une exception non gérée déclenche l'évènement PluginException. Si l'exception n'est pas gérée (PluginExceptionEventArgs.Handled=true) alors le plugin est redémarré, en sauvegardant son état (via les fonction SaveState et LoadState).
Coté sécurité :
Par défaut, un plugin tourne dans un bac à sable avec aucun droit (juste celui de s'exécuter). Pour modifier, vous devez vous abonner à l'évènement GetPluginPermissions du Host, et renseigner la propriété PluginPermissionEventArgs.Permissions avec les permissions que vous donnez à votre plugin.