begin process at 2012 02 15 17:42:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Système

 > 

Exécution

 > 

VB.Net - Gestion de plugins (Assembly, Appdomain)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

VB.Net - Gestion de plugins (Assembly, Appdomain)

vendredi 27 octobre 2006 à 14:08:56 | VB.Net - Gestion de plugins (Assembly, Appdomain)

olixelle

Bonjour,

je réalise une applicaiton dans laquelle je souhaite implémenter un systeme de plugins.
J'ai donc un .exe central et dans un répertoire "plugins", des dll qui sont les plugins
Au démarrage de l'appli, je parcours le répertoire plugins, a chaque fois que je rencontre une dll, je la charge en tant qu'assembly, je verifie via la réflexion si l'assembly contient un type implémentant une interface et si c'est le cas, j'instancie ce type pour l'ajouter dans mon appli.

Tout ca marche très bien

2 ème étape, je souhaite ajouter un gestionnaire de plugin dans mon appli: le gestionnaire pourrait ajouter ou supprimer des plugins.
Concernant la suppression de plugins, je veux supprimer les dll correspondante. Cependant, pour les supprimer, je dois déréférencer l'assembly de mon appli. Par contre, on ne peut pas déréférencer comme ca, on est obligé de décharger l'appdomain correspondant

Il faudrait donc que je puisse créer pour chaque plugin (dll, assembly) un appdomain correspondant.

Et c'est la ou je bloque, je n'arrive pas à créer un appdomain par plugin....

Si vous avez des idées, je commence vraiment à bloquer la :(

Rollerman

_________________________________________________________________________________________________

'*****************************************************************************************************

'fonction scannant un répertoire et retournant un arraylist avec la liste des plugins trouvés

PublicSub load_plugins(ByVal e_plugins_directory AsString)

'init les arraylist

singleton.t_plugins =

New ArrayList

'parcours le dossier plugins pour charger les plugins

Dim chemin AsString = e_plugins_directory

Dim d AsString

'pour chaque répertoire dans le répertoire plugin

ForEach d In IO.Directory.GetDirectories(chemin)

'cree un domain pour le repertoire

Dim setup_test AsNew AppDomainSetup

Dim domain_name AsString = "domain_" & d.Substring(d.LastIndexOf("\") + 1)

setup_test.ApplicationBase = d

setup_test.PrivateBinPath = d

current_domain = AppDomain.CreateDomain(domain_name,

Nothing, setup_test)

'parse les dll du dossier

current_directory_plugin = d

current_domain.DoCallBack(

AddressOf scan_plugin_folder)

Next

EndSub

PublicSub scan_plugin_folder()

'parse les fichiers

Dim f AsString

ForEach f In IO.Directory.GetFiles(current_directory_plugin)

'si c une dll

If f.EndsWith(".dll") Then

'on charge la dll par réflexion

Dim monAssembly As [Assembly]

Try

monAssembly = System.Reflection.Assembly.LoadFrom(f)

'parcourt les type de l'assembly

Dim MonType As Type

ForEach MonType In monAssembly.GetTypes()

'pour chaque type, on regarde si il hérite de uc_multimedia

If MonType.BaseType.Name = "uc_multimedia" Then

'instancie & ajoute au tableau

singleton.t_plugins.Add(current_domain.CreateInstanceFrom(monAssembly.FullName, MonType.Name))

EndIf

Next

Catch ex As Exception

'rien, c'est que ce n'est pas une assembly valide

EndTry

EndIf

Next

EndSub




Cette discussion est classée dans : dll, plugin, domain, assembly, plugins


Répondre à ce message

Sujets en rapport avec ce message

CallBack : interconnection [ par ABF ] Bonjour, J'ai testé plusieurs choses : - plugins - dll Mon soucis est de faire une sorte de mix entre les 2. En fait j'ai une appli principale et Publication et dll StdFormat [ par LaNono ] Bonjour tout le monde Je suis en train de publier mon application pour l'installer sur d'autres postes. J'ai utilisé pour cela l'action "Publier" de [HELP!!]Creer une DLL et l'utiliser dans un EXE [ par Broniz ] Bonjour,Je sais que plusieurs exemples et tutoriels ont déja été posé sur le sujet, mais je n'ai reussi à en faire fonctionner aucun ...J'ai un Projet DLL/Plugin avec Visual Basic 2008 Express (VB.NET) [ par sebastien_hebrard ] Bonjour tout le monde, Je souhaiterais savoir s'il est possible de développer des composants DLL/Plugin avec la version Visual Basic 2008Express (VB Assembly public non référencable après enregistrement dans le GAC [ par sturtrid ] [color=purple][b]Bonjour à tous ![/b][/color] [^^happy13] Je viens vous demander un peu d'aide sur un problème d'enregistrement d'une dll dans le GAC [.NET] Référence et emplacement [ par alicvb ] Bonjour,Je travaille sous VB.NET 2005.Voici mon problème : Mon projet contient une projet principal (PP) une dll que j'ai créé (PD) et plein de sous p Outlook et DLL VB.Net ? [ par Pijay ] Bonjour à tous,Je suis actuellement en train de développer une DLL en VB.Net.Dans un premier temps, j'ai réussi à développer une DLL qui contient une Acces Outlook à partir d'une DLL VB.Net [ par Pijay ] Bonjour à tous,Je suis actuellement en train de développer une DLL en VB.Net.Dans un premier temps, j'ai réussi à développer une DLL qui contient une Création de dll com à partir d'une dll.NET [ par trainkill ] Bonjour,Je suis en train de faire une classe d'assembly afin de générer une dll com afin de pouvoir utiliser des méthodes d'une autre dll.net (fournie Problème de DLL et interface [ par dragon ] Bonjour tout le monde,j'ai un petit problème sous Visual Basic 2005je veux ajouter la possibilité de charger des plugin dans mon application. J'ai réc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,167 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales