J'ai passé des heures à lire sur AppDomains, mais je ne suis pas sûr qu'ils fonctionnent comme j'espère.Est-ce que .NET AppDomains peut faire cela?
Si j'ai deux classes, Foo générique <T> à AppDomain # 1, Bar à AppDomain # 2:
App Domaine # 1 est l'application. App Domain # 2 est quelque chose comme un plugin, et peut être chargé et déchargé dynamiquement. AppDomain # 2 veut créer Foo <Barre> et l'utiliser. Foo <T> utilise beaucoup de classes dans AppDomain # 1 en interne.
Je ne veux pas AppDomain # 2 en utilisant objet foo avec réflexion, je veux qu'il utilise Foo <Bar> foo, avec tout le typage statique et la vitesse compilée qui va avec. Cela peut-il être fait en considérant que AppDomain # 1, contenant Foo <T>, n'est jamais déchargé?
Si tel est le cas, y a-t-il un accès distant lorsque vous utilisez Foo <Bar>?
Lorsque je décharge AppDomain # 2, le type Foo <Bar> est détruit?
éditer SO a dépouillé tous mes < >, les a rajoutés manuellement.
IpcChannel n'est pas nécessaire. vous pouvez utiliser appdomain.CreateInstance pour faire cela pour vous. Tant que la classe en question est sérialisable ou marshalobjbyref, vous obtiendrez ce que vous voulez sans avoir à configurer de canaux d'accès distant. le .net runtime est assez intelligent pour savoir comment faire le remoting entre deux domaines d'applications avec une grande efficacité, car ils sont sur le même ordinateur. –
Ok, donc si je vous comprends, je peux créer Foo; instances dans AppDomain # 2 pas de problème et de les utiliser comme d'habitude - pas de communication à distance - il suffit de charger dans l'ensemble contenant Foo . J'ai vraiment besoin dans AppDomain # 1 est de séparer un ensemble contenant seulement les quelques singletons statiques à vie longue qui détiennent et gèrent mes ressources non gérées de sorte qu'il y ait seulement une copie de ceux-ci. Pas besoin d'avoir Foo ici. Lorsque Foo dans AppDomain # 2 utilise ces objets de AppDomain # 1, une sorte d'accès distant est nécessaire. Une façon de faire des appels de méthode statiques à travers AppDomains - quoi? –
Eloff
@Vagaus semble avoir la réponse, avoir les objets dans AppDomain # 1 sous-classe MarshalByRefObject et se retrouver avec des proxies aux singletons à long terme de AppDomain # 1, qui pourrait être le heureusement utilisé dans AppDomain # 2, sans doute marshalling arguments de méthode et les valeurs de retour à travers les limites AppDomain. – Eloff