2010-08-06 3 views
1

내 앱으로 가져 오는 MEF 플러그인 컨트롤을 만들었습니다. 이제 플러그인이 앱에서 부품을 가져올 수있게하려고합니다. 플러그인에서 카탈로그를 설정하는 방법을 알 수 없으므로 앱에서 내보내기를 찾을 수 있습니다. 누군가 어떻게 이것이 이루어 졌는지 말해 줄 수 있습니까? 아래는 현재 실행중인 어셈블리로 AssemblyCatalog를 만들려고 할 때 작동하지 않는 코드입니다.MEF : 내 보낸 개체에서 가져 오는 방법?

[Export(typeof(IPluginControl))] 
public partial class MyPluginControl : UserControl, IPluginControl 

    [Import] 
    public string Message { get; set; } 


    public MyPluginControl() 
    { 
     InitializeComponent(); 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     AggregateCatalog catalog = new AggregateCatalog(); 
     catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); 
     CompositionContainer container = new CompositionContainer(catalog); 
     try 
     { 
      container.ComposeParts(this); 
     } 
     catch (CompositionException ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

    } 
} 

답변

2

이 작업을 수행 할 필요가 없습니다.

이 플러그인에 기본 응용 프로그램 어셈블리가 포함되어있을 때 사용중인 카탈로그가 있는지 확인하십시오.

MEF가 형식을 구성하여 내보낼 때 (다른 곳에서 IPluginControl 가져 오기를 수행하기 위해)이 부분을 이미 구성 할 것이며, 그 시점에서 "메시지"문자열을 가져옵니다 (하지만 대부분의 경우 "메시지"에 이름을 지정하거나 사용자 정의 유형을 지정해야합니다. 그렇지 않으면 문자열을 가져오고 응용 프로그램 내에서 단일 "문자열"내보내기 만 사용할 수 있습니다.

MEF가 파트를 작성할 때 지정된 유형 (이 경우 IPluginControl)과 일치하는 모든 유형을 찾고 단일 오브젝트를 인스턴스화하고 해당 오브젝트에 대한 [Import] 요구 사항을 채 웁니다. 따라서 사용자가이 유형을 구성 할 필요가 없습니다 생성자)를 가져온 다음 해당 유형을 가져 오는 모든 객체에 할당합니다.

+0

감사합니다. 도움을 준 모든 것이 도움이되었으며 지금 작동합니다! –

관련 문제