차단

2012-02-08 2 views
2

모두차단

같은 수출 서명이 오직 하나 (이 가능 가져와야이 개 수출 구성 요소가 존재하는 경우 문제는 실제적인 예를 대체 할 새로운 플러그인을 설치입니다 이전 버전을 제거하지 않고 이전 버전을 제거하십시오.). 어떤 구성 요소를 가져와야하는지 알려주는 구성 파일을 제공 할 수 있지만 MEF에게 올바른 선택을하는 방법은 무엇입니까?

  1. 은 사용자 정의 카탈로그를 사용 가능한 플러그인을 필터링 :

    나는 세 가지 방법이있다. 그러나 A가 B와 A를 수입 할 때 A와 B가 동일한 수출 서명을 가지는 반면 A가 B와 B를 수입한다고 가정하십시오. 사용자 지정 카탈로그는 각 구성 요소에 대한 새 사용자 지정 카탈로그를 만드는 것을 제외하고는이를 처리 할 수 ​​없습니다.

  2. MEF 조성물에서 차단. 나는 그것이 가능하고 어떻게 해야할지 모르겠다. 그러나 우리가 구성 과정에서 가로 채게하는 방법이 있다면, 이것이 최고의 것이 될 수 있습니다.

  3. 실제 인터페이스 대신 가져 오기 래퍼를 사용하십시오. 구성 요소가 구성되면 래퍼를 초기화하고 래퍼가 선택 로직을 처리 할 수 ​​있습니다 (예 : 프롬프트 창으로 사용자가 구성을 하나를 선택하거나 읽을 수 있습니다)

답변

2

무엇 [ImportMany]의 사용에 대한 것입니다 동일한 서명에 대해 가능한 모든 가져 오기를 가져온 다음이 가져 오기 목록에서 특정 조건 (구성 파일 또는 다른 항목)에 대해 원하는 것을 선택하십시오.

편집 : 귀하의 제안 번호 3 번을 원하고 있습니다.이 번호는 쉽게 생각할 수 있습니다. 래퍼가 [ImportMany]와의 실제 인터페이스를 처리하고 플러그인이 래퍼에게 GetTheOneInterface()를 요청합니다.

+0

예, [ImportMany]는 해결할 수 있지만 모든 컴포지션 구성 요소가 플러그인 선택 로직 자체를 처리해야합니다. 나는 이것을 피하려고 노력하고있다. –

+0

참조 http://stackoverflow.com/questions/7750640/intercepting-dependencies-in-mef, ExportProvider가 방법 2 –

+0

thx를 충족 할 수 있도록 구현하는 데 도움이 될 수 있습니다. 만약 당신이 물건을 작동 시키면 여기에 답변으로 게시 해주십시오. – blindmeis