2009-10-28 13 views

risposta

7

Lo scenario più comune che ho visto è quello di essere in grado di fornire estensibilità con un modello di sicurezza diverso rispetto al programma principale.

Caricamento di un plugin in un AppDomain separato consente due cose:

  1. È possibile implementare un modello di sicurezza più ristretto
  2. È possibile impedire il plugin dal abbattere l'applicazione se è bacato

Un altro buon uso di AppDomains è caricare e ispezionare un assembly. Facendo questo in un AppDomain separato puoi raccogliere informazioni (o eseguire codice) da un assembly separato, quindi scaricare l'intero assembly dallo spazio del processo. Se si carica l'assembly direttamente, non è possibile scaricarlo. Ciò è utile anche se si desidera essere in grado, in fase di esecuzione, di "aggiornare" un tipo a una nuova versione (ad esempio: caricare un assembly remoto e ricaricarlo in seguito).

+0

Sono sicuro che il caricamento di un plug-in buggato in un dominio di applicazione separato non può impedire al plug-in di bloccare l'applicazione: un'eccezione non gestita porterà il dominio dell'applicazione verso il basso e, di conseguenza, interromperà l'intero processo. –

+0

+1! OO! bella pepita di informazioni. –

+3

Dipende da come fai le cose. È possibile configurare un appdomain in modo da abbatterlo non abbattere il processo. Vedere il primo vantaggio elencato su http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx –

3

Un esempio tipico è per i casi plug-in/addin-like. Non solo ti permette di scaricare la DLL, se necessario, ma ti offre anche un controllo di sicurezza migliore su ciò che il plugin è autorizzato a fare.

Inoltre, se si creano assiemi temporanei (generazione di codice) che si desidera scaricare nuovamente, questo è un buon modo per farlo. (LCG consente solo l'implementazione di singoli metodi, se si desidera implementare una classe completa che è necessario emettere su un assembly "reale").

5

Si consiglia di creare un nuovo dominio quando è necessario ospitare componenti di terze parti all'interno dell'applicazione non affidabili o non affidabili (come i plug-in) o si desidera poterli scaricare.