2012-07-04 3 views
1

DLL에 클래스가 들어있는 MAF 응용 프로그램을 개발 중입니다. 문제는 AddIn 중 하나에 의해 노출 된 메소드 중 하나가이 클래스를 사용할 때입니다. 예 :MAF가 DLL 내부에있는 DLL을 가지고 있습니다.

class A 
{ 
    Property_1 
    Property_2 

    Method_X() 
} 

그리고 내 추가 기능은 내가 파이프 라인에 DLL을 배치해야이와 함께, 그래서 클래스에게

MyAddIn.Set(class A); 

를 사용하는 방법이있다? 또는이 시나리오를 어떻게 진행해야합니까?

그래서,라는 기사 this

하수의 일부를 연결할 수 없습니다 ... "이 있습니다

proyect 시작의 AddInStore.Update의 경고() 메소드처럼 메시지를 던졌습니다

버전 관리, 컬렉션 및 WPF 비주얼 전달, 직렬화가 불가능한 유형 전달 등 MAF가 제공하는 많은 다른 기능 "을 제공합니다. 그러나 예를 찾을 수는 없습니다.

편집 : 계약에 대한 제한에 대한이 link에 대한 유리창에

감사합니다. 그리고 더 많은 연구를 한 결과, article이 Paint.NET proyect를 통해 참조없이 호스트에서 데이터 유형을 사용하는 방법을 보여줍니다.

두 소스를 모두 읽은 후에 이것이 내가 찾고있는 것임을 알았습니다. 그러나 나는 아직 그것을 이해할 수 없다.

마지막 청원서로서, 누군가 제게 코드 예제를 제공해 주시겠습니까? 마침내 그것을 얻으려고.

감사합니다.

+0

당신이 System.Addin를 계속하기 전에, 나는 다른 추가 엔진, MEF와 같은 예를 들어 좀보고 조언을 것입니다. MEF는 인기가 높으며 학습 곡선이 낮습니다. System.AddIn을 사용하면 많은 시간을 투자하여이를 처리 할 수 ​​있습니다. System.AddIn에는 추가 기능 격리 기능 (다른 AppDomain/Processes)이 있습니다.이 기능은 사용자 자신이 수행하기가 매우 어려우며 선택하는 유일한 이유 일 수 있습니다. 버전을 찾고 있다면 Autofac + MEF를 살펴보십시오. 마지막으로 추가 기능 만 있으면 MEF가 충분해야합니다. 문안 인사. –

+0

안녕하세요, 저는 이미 MEF를 보았습니다. 그러나 MAF를 사용하는 주된 이유는 응용 프로그램을 종료하지 않고 플러그인을 업데이트하기 때문입니다. 내가 아는 한, 이것은 MEF에서는 불가능합니다. 내 응용 프로그램은 이미 AddIn을 업데이트 할 수 있습니다. – BlackCath

답변

2

guidelines은 계약 어셈블리에서 허용되는 유형을 알아야합니다.

기본적으로 파이프 라인 (계약서, 어댑터 및보기)에서 언급 한 dll은 호스트에서 추가 기능으로 누출 될 수 있으므로 참조하지 마십시오. 즉, 모든 파이프 라인 세그먼트가 동일한 어셈블리를 참조하기 때문에 버전 관리가 손실됩니다. 즉, 추가 기능에서 v1을 참조하고 계약에서 v.2를 참조하는 경우 두 버전이 모두로드되고 InvalidCasrtException이 throw됩니다.

이 문제를 해결하려면 클래스 A를 기반으로 인터페이스를 만들어 계약을 체결해야합니다. 그런 다음 추가 기능에서 구현을 제공 할 수 있습니다. 당신은 버전을 잃지 않을 것입니다.

감사합니다,

유리창

+0

도움 주셔서 감사합니다. 매우 수완이 많습니다. 업데이트 된 상태로 유지하기 위해 질문을 편집했습니다. 다시 한번, 고마워. – BlackCath