Je souhaite avoir une application qui fonctionne comme hôte pour de nombreuses autres petites applications. Chacune de ces applications devrait fonctionner comme une sorte de plugin pour cette application principale. Je les appelle des plugins non pas dans le sens où ils ajoutent quelque chose à l'application principale, mais parce qu'ils ne peuvent fonctionner qu'avec cette application hôte car ils dépendent de certains de ses services.Question sur la façon de mettre en œuvre une application hôte C# avec une architecture de type plug-in
Mon idée était de faire fonctionner chacun de ces plugins dans un domaine d'application différent. Le problème semble être que mon application hôte devrait avoir un ensemble de services que mes plugins voudront utiliser et d'après ce que je comprends, faire en sorte que les données entrent et sortent des différents domaines d'applications n'est pas une bonne chose. D'une part, je voudrais qu'ils se comportent comme des applications autonomes (bien que, comme je l'ai dit, ils doivent utiliser plusieurs fois les services de l'application hôte), mais d'autre part, je voudrais que si l'un d'entre eux se bloque, mon application principale n'en souffrirait pas. Quelle est la meilleure approche (.NET) pour ce genre de situation?
Faites-les tous courir sur le même AppDomain mais chacun dans un thread différent? Utiliser différents AppDomains? Un pour chaque "plugin"? Comment les ferais-je communiquer avec l'application hôte? Un autre moyen de le faire?
Bien que la vitesse ne soit pas un problème ici, je ne voudrais pas que les appels de fonction soient beaucoup plus lents qu'ils ne le sont lorsque nous travaillons avec une simple application .NET.
Merci
EDIT: Peut-être que je vraiment besoin d'utiliser différents domaines d'application. D'après ce que j'ai lu, le chargement d'assemblys dans différents AppDomains est le seul moyen de pouvoir les décharger ultérieurement du processus.
Ceci est pour une application de passe-temps, rien de spécial. Je fais entièrement confiance au code courant. Le problème est que j'ai besoin que chacun de mes plugins fonctionne à tout moment (ie je ne peux pas simplement faire en sorte que mon application hôte appelle mes plugins, ils doivent être indépendants et s'exécuter eux-mêmes.) –
chacun leur propre Thread pour fonctionner et appeler n'importe quelle méthode 'Main' que vous avez définie. Vous pouvez choisir d'enrouler l'appel sur 'Main' à partir du thread dans un try/catch si vous souhaitez fournir un repli amical dans le cas où un plugin lève une exception. –
Oui, mais voir Modifier ci-dessus. De cette façon, je ne pouvais plus décharger les assemblys chargés sans redémarrer l'application. Je dois les avoir dans différents domaines d'application pour pouvoir les décharger quand je le veux. –