Je m'excuse maintenant si ma prochaine explication n'a pas assez de sens; Je suis reconnu pour cela, bien que j'essaie de faire autrement. Je suis en train d'écrire un service qui utilise des plugins définis par l'utilisateur. Je suis en essayant de les isoler - en gardant leurs assemblys hors du domaine d'application du service - en utilisant des interfaces définies dans un assembly partagé.Résumé classes de base et appdomains
Ce qui me tue, c'est l'utilisation de classes de base abstraites. Il existe des fonctionnalités communes à toutes les implémentations de certaines des interfaces, donc les classes de base abstraites ont du sens. Si une base abstraite est dans l'assembly de service, alors tous les plugins qui la sous-classent obtiennent leurs assemblys glissés dans le domaine d'application du service. Cependant, il existe des membres internes dans la base abstraite (propriétés avec setters internes et getters publics) que le service utilise, il doit donc être dans le même assembly que le service pour que cela soit possible.
Il me semble que ce que je veux n'est pas possible, mais je crois aussi que c'est parce que je fais fausse route. J'essaie désespérément de faire un meilleur usage des bons modèles et pratiques dans cet exercice et d'apprendre en cours de route.
Étant donné que les interfaces sont la clé, ce que j'ai fini par faire, c'est que la classe de base abstraite implémente une interface interne. Cette interface interne implémente une interface publique, de sorte que la classe de base implémente les membres publics et internes. Si un objet sous-classe la classe de base, alors je sais que j'ai accès à une propriété d'interface interne que je peux définir. Cela semble garder l'assemblage du plugin hors de l'appdomain principal! – redman