Bonjour à tous,
Je suis en train de développer une application très classique dans son fonctionnement, mais je cale sur un petit problème de conception. Voici son l'idée:
- Chargement de l'application (fenêtre principale)
- L'utilisateur charge un projet
- Les plugins (des dlls) définis dans le projet sont chargés
- L'utilisateur ouvre un autre projet
- Les plugins définis dans cet autre projet sont chargés
Un plugin est capable d'ajouter des composants graphiques à l'application:
- Boutons dans la barre de menu
- Fenêtres dockables
- ...
J'aimerai que lorsque l'utilisateur charge un autre projet les plugins qui sont devenus inutiles soient déchargés. Sachant qu'il n'est pas possible de décharger des dlls qui ont été loadées, j'ai identifié les scénarios suivants:
- Tout charger dans un même AppDomain et ne libérer que la mémoire utilisée par les plugins en appelant une méthode de nettoyage.
- Charger chaque plugins dans un AppDomain différent (mais à ce moment là je n'arrive pas à faire charger les WinForms par l'application).
- Utiliser une petite fenêtre qui permet de choisir son projet et charger à ce moment là l'application et les plugins spécifiques dans un AppDomain qui est détruit puis reconstruit au prochain chargement de projet.
Est-ce qu'à votre connaissance il existe une méthode plus efficace pour traiter ce genre d'applications? En regardant dans les solutions professionnelles, j'ai quand même l'impression qu'aucun soft ne se prend la tête à faire une liste de plugins différente par projet chargé...
Bonne journée à tous,
Merci d'avance pour vos retours.
Partager