2009-10-28 8 views

Antwort

7

Das häufigste Szenario, das ich gesehen habe, ist in der Lage zu sein, Erweiterbarkeit mit einem anderen Sicherheitsmodell als das Hauptprogramm bereitzustellen.

ein Plugin in einer separaten AppDomain Laden ermöglicht es, zwei Dinge:

  1. Sie können einen eingeschränkteren Sicherheitsmodell
  2. implementieren Sie können Ihre Anwendung das Plugin verhindern abzureißen, wenn es Buggy ist

Eine weitere nette Anwendung von AppDomains ist das Laden und Inspizieren einer Baugruppe. Wenn Sie dies in einer separaten Anwendungsdomäne ausführen, können Sie Informationen (oder Code) von einer separaten Assembly abrufen und anschließend die gesamte Assembly aus dem Prozessbereich entfernen. Wenn Sie die Assembly direkt laden, besteht keine Möglichkeit, sie zu entladen. Dies ist auch nützlich, wenn Sie zur Laufzeit einen Typ auf eine neue Version "upgraden" möchten (zB: Laden Sie eine entfernte Assembly und laden Sie sie später neu).

+0

Ich bin mir ziemlich sicher, das Laden eines Buggy-Plug-Ins in eine separate Anwendungsdomäne kann nicht verhindern, dass das Plug-in Ihre Anwendung zum Absturz bringt - eine unbehandelte Ausnahme bringt die Anwendungsdomäne zum Absturz und den gesamten Prozess. –

+0

+1! OO! nice nugget von Informationen. –

+3

Es hängt davon ab, wie Sie Dinge tun. Es ist möglich, eine Anwendungsdomäne einzurichten, so dass der Prozess nicht abgebrochen wird. Siehe ersten aufgeführten Vorteil auf http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx –

3

Ein typisches Beispiel ist für Plugin-/Addin-ähnliche Fälle. Sie können nicht nur die DLL bei Bedarf löschen, sondern erhalten auch bessere Kontrolle darüber, was das Plugin tun darf.

Wenn Sie temporäre Assemblys (Codegenerierung) erstellen, die Sie erneut entladen möchten, ist dies ein guter Weg, dies zu tun. (LCG erlaubt nur die Implementierung einzelner Methoden, wenn Sie eine komplette Klasse implementieren möchten, die Sie an eine "echte" Baugruppe ausgeben müssen).

5

Es wird empfohlen, eine neue Domäne zu erstellen, wenn Sie Komponenten der dritten Partei innerhalb Ihrer Anwendung hosten müssen, die unzuverlässig sind oder denen Sie nicht vertrauen (wie Plug-Ins) oder sie entladen möchten.

Verwandte Themen