AppDomains에 대해 몇 시간 씩 읽은 적이 있지만 제대로 작동하는지 확신 할 수 없습니다. 나는 두 개의 클래스, 응용 프로그램 도메인 # 1의 일반적인 푸 <T>이있는 경우.NET AppDomains가이 작업을 수행 할 수 있습니까?
는, 바의 AppDomain에서 # 2 :
응용 프로그램 도메인 # 1은 응용 프로그램입니다. App Domain # 2는 플러그인과 비슷하며 동적으로로드 및 언로드 할 수 있습니다.
AppDomain # 2는 Foo <Bar>을 만들고 사용하려고합니다. Foo <T>은 내부적으로 AppDomain # 1에서 많은 클래스를 사용합니다.
리플렉션에서 foo 개체를 사용하여 AppDomain # 2를 사용하고 싶지 않습니다. Foo <Bar> foo를 사용하고 싶습니다. 모든 정적 입력과 컴파일 속도가 함께 사용됩니다. Foo <T>을 포함하는 AppDomain # 1이 언로드되지 않는다는 것을 고려하여이 작업을 수행 할 수 있습니까?
그렇다면 Foo <Bar>을 사용할 때 리모 세션이 발생합니까?
AppDomain # 2를 언로드하면 Foo <Bar> 유형이 삭제됩니까?
편집 모두 내 < >을 삭제했습니다. 수동으로 다시 추가했습니다.
IpcChannel은 필요하지 않습니다. appdomain.CreateInstance를 사용하여이 작업을 수행 할 수 있습니다. 문제의 클래스가 직렬화 가능하거나 marshalobjbyref이면, 원격 채널을 구성하지 않고도 원하는 것을 얻을 수 있습니다. .NET 런타임은 동일한 컴퓨터에 있기 때문에 높은 효율성으로 두 앱 도메인간에 원격 작업을 수행하는 방법을 알기에 충분히 똑똑합니다. –
좋아, 이해해 주시면 Foo을 만들 수 있습니다. AppDomain # 2의 인스턴스는 아무런 문제가없고 정상적으로 사용합니다. 리모컨이 필요하지 않습니다. Foo 을 포함하는 어셈블리에로드하면됩니다. AppDomain # 1은 관리되지 않는 리소스를 보유하고 관리하는 몇 개의 정적 인 수명이 긴 싱글 톤을 포함하는 어셈블리를 분리하여 하나의 복사본 만 포함되도록합니다. Foo를 가질 필요가 없습니다 여기에. 여기서 AppDomain # 2의 Foo 은 AppDomain # 1에서 이러한 개체를 사용하는데 일종의 원격 처리가 필요합니다. AppDomains에서 정적 메서드 호출을 수행하는 몇 가지 방법은 무엇입니까? –
Eloff
@Vagaus가 대답을 갖고있는 것처럼 보입니다. AppDomain # 1 하위 클래스 인 MarshalByRefObject에 개체가 있고 AppDomain # 2에서 오랫동안 살았던 싱글 톤의 프록시로 끝납니다. AppDomain # 2에서 행복하게 사용할 수 있습니다. 투명하게 마샬링합니다. AppDomain 경계에서 메서드 인수와 반환 값 – Eloff