문제

플러그인에 크게 의존하는 .NET 응용 프로그램을 개발하고 있습니다. 응용 프로그램 자체에는 원격 서버에 대한 연결이 포함되어 있습니다.

최근에 응용 프로그램 도메인을 파고 나머지 응용 프로그램에서 플러그인 코드를 격리하기위한 이상적인 솔루션으로 간주합니다.

그러나 플러그인을 호스팅하기 위해 응용 프로그램 도메인을 구현할 수없는 큰 단점이 있습니다. 연결 객체에 대한 참조를 전달하는 데 필요한 다른 응용 프로그램 도메인을 참조하여 객체를 전달할 수있는 방법이없는 것 같습니다.

나는 누군가가 나에게 해결 방법을 줄 수 있기를 바랐으므로 그 대상에 대한 언급을 전달할 수 있습니다.

참고 : 프록시 생성은 의문의 여지가 없으며, 연결 계층은 클래스가 자동 생성되기 때문에 이미 프록시 역할을합니다.

Note2 : System.addin은 소형 프레임 워크에서 사용할 수 없으므로 사용할 수 없습니다.

도움이 되었습니까?

해결책

당신은 파생을 시도 했습니까? MarshalbyRefobject? 상속 계층 구조를 망치는 것은 고통이지만, 그것이 당신이 원하는 것이라고 생각합니다.

문서에서 :

MarshalByRefoBject는 프록시를 사용하여 메시지를 교환하여 응용 프로그램 도메인 경계를 통해 통신하는 객체의 기본 클래스입니다. MarshalbyRefobject에서 물려받지 않는 물체는 값에 따라 암시 적으로 마샬입니다. 원격 응용 프로그램이 값 객체별로 마샬을 참조하면 객체의 사본이 응용 프로그램 도메인 경계를 통해 전달됩니다.

MarshalbyRefobject 객체는 로컬 응용 프로그램 도메인의 경계 내에서 직접 액세스됩니다. 원격 응용 프로그램 도메인의 응용 프로그램이 처음으로 MarshalByRefoBject에 액세스하면 프록시가 원격 응용 프로그램으로 전달됩니다. 프록시의 후속 통화는 로컬 애플리케이션 도메인에있는 물체로 다시 마샬링됩니다.

유형이 응용 프로그램 도메인 경계에서 유형을 사용하면 유형이 MarshalbyRefobject에서 상속해야하며, 객체의 부재는 생성 된 응용 프로그램 도메인 외부에서 객체 부재를 사용할 수 없기 때문에 객체의 상태를 복사해서는 안됩니다.

내 경험에 따르면, 그것은 매우 제한적 일 수 있습니다. 당신은 실제로 appdomain 경계를 통해 가능한 한 적게 수행해야하며, 원시 유형, 문자열 및 배열이 필요한 작업으로 자신을 제한하는 것이 좋습니다. 이것은 여러 appdomains로 작업하는 데있어 내 자신의 경험이 없기 때문일 수 있지만, 그것은 약간의 지뢰밭이라는 경고 일뿐입니다.

다른 팁

AppDomains 간의 동일한 인스턴스와 대화하려면 MarshalbyRefobject. 이 방법으로, 모든 메소드 호출 (속성 포함)은 실제로 다른 앱 도메인에 대한 원격 호출입니다. 그게 도움이 되나요?

그 청소에주의하십시오 MarshalByRefObject 프록시는 임대에 따라 정리됩니다. 간단히 말해서 특정 시간 동안 개체를 사용하지 않으면 회수됩니다. 당신은 그것을 재정의하여 이것을 제어 할 수 있습니다 InitializeLifetimeService 필요한 임대 물체를 반환하려면 필요한 것입니다. 돌아 오면 null 임대를 효과적으로 비활성화 한 다음 AppDomain이 언로드 된 경우에만 개체가 재생됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top