2012-01-18 8 views
5

Budujemy aplikację .NET, do której ładujemy zewnętrzne zestawy kodów ("wtyczki"). Do tego momentu ładowaliśmy te zespoły do ​​jednej (głównej) domeny aplikacji.Jak obsługiwać wymianę danych między domenami aplikacji

Chcielibyśmy móc rozładować złożenie po jego załadowaniu.

W tym celu projektujemy system, który utworzy osobne dodatkowe AppDomain do hostowania zestawów wtyczek, które zostaną rozładowane do woli.

Problemy mamy z tym podejściem:

  1. Wtyczka DLL jest potrzebna interakcja z klas w głównym AppDomain (rejestratora, na przykład).
  2. Dane wysyłane do biblioteki DLL wtyczki niekoniecznie są oznaczone jako Serializowalne lub pochodzą od MarshalByRefObj.

Czy istnieje jakaś powszechna praktyka dzielenia aplikacji w takich przypadkach? Jakie jest najlepsze rozwiązanie, do którego moglibyśmy dążyć?

Kolejne interesujące pytanie - dlaczego MarshalByRef nie ma atrybutu i zmusza nas do wyprowadzenia z obiektu?

+1

'Chcielibyśmy móc rozładować zespół po jego załadowaniu. Http://stackoverflow.com/questions/6258160/unloading-ssembly-loaded-with-assembly-loadfrom 1. Do interakcji między oddzielne AppDomains prawdopodobnie będziesz musiał to zrobić poprzez Remoting. 2. jest stwierdzeniem, czy mógłbyś je edytować, aby wyjaśnić to drugie pytanie –

Odpowiedz

3

Najprostszym sposobem komunikacji w AppDomains jest użycie AppDomain.CreateInstanceAndUnwrap. Umożliwi to utworzenie instancji obiektu w innym AppDomain i zwrócenie proxy do tego obiektu. Z serwera proxy można skutecznie wykonywać wywołania metod w całej domenie aplikacji.

Jeśli twoje obecne klasy nie rozszerzają się na MarshalByRef, powinieneś utworzyć klasę pomostową, która działa i może działać jako pośrednik.

Powiązane problemy