2012-01-18 14 views
5

Stiamo costruendo un'applicazione .NET in cui vengono caricati assembly di codice esterni ("plug-in"). Fino a questo punto, stavamo caricando questi assembly in un singolo dominio di applicazione (principale).Come gestire lo scambio di dati del dominio cross app

Vorremmo essere in grado di scaricare un assieme dopo che è stato caricato.

A tal fine, stiamo progettando un sistema che creerà un AppDomain secondario separato per ospitare gli assembly del plugin, da scaricare a volontà.

I problemi che abbiamo con questo approccio:

  1. Il plugin DLL avrà bisogno di interagire con le classi nelle principali AppDomain (logger, per esempio).
  2. I dati inviati alla dll del plugin non sono necessariamente contrassegnati come serializzabili o derivati ​​da MarshalByRefObj.

Esiste una pratica comune di partizionamento dell'applicazione in questi casi? Qual è la soluzione migliore per cui possiamo andare?

Un'altra domanda interessante: perché MarshalByRef non utilizza un attributo e ci costringe a derivare da un oggetto?

+1

'Ci piacerebbe essere in grado di scaricare un assieme dopo che è stato caricato. Http://stackoverflow.com/questions/6258160/unloading-the-assembly-loaded-with-assembly-loadfrom 1. Per interagire AppDomain separati sarà probabilmente necessario farlo tramite Remoting. 2. è una dichiarazione, potresti modificare per chiarire questa seconda domanda –

risposta

3

Il modo più semplice per comunicare attraverso AppDomains è utilizzare AppDomain.CreateInstanceAndUnwrap. Ciò consentirà di creare un'istanza di un oggetto in un altro AppDomain e restituire un proxy a tale oggetto. Dal proxy puoi effettivamente effettuare chiamate di metodo attraverso il dominio dell'app.

Se le classi attuali non si estendono MarshalByRef, è necessario creare una classe bridge che funzioni e possa fungere da intermediario.

Problemi correlati