2014-10-30 3 views
-2

MEF에 새로운 기능입니다. MEF framewok를 사용하여 C# 응용 프로그램에 플러그인 확장 성을 추가하려고합니다.Mef 플러그인 클래스를 기반으로 변수를 만드는 방법

데이터베이스에서 플러그인을 다운로드하고 바이트 [] 데이터를 통해로드 중입니다.

this.PluginCatalog.Catalogs.Add(new AssemblyCatalog(Assembly.Load(RawData))); 

플러그인의 기본 클래스를 사용하여 시도 할 때까지 모든 것이 마술처럼 작동했습니다. 내가 DownloadManager의 변수 형식화를 작성해야이 플러그인을 사용하려면

using System; 
using System.Net; 
using System.ComponentModel; 

using System.ComponentModel.Composition; 
using System.Reflection; 

using PluginCommon; 

namespace Plugins 
{ 
    [Export("Plugin", typeof(IPlugin))] 
    [PluginMetadata("DownloadManager", "1.0")] 
    [PartCreationPolicy(CreationPolicy.NonShared)] 

    public class DownloadManager : INGPlugin 
    { 
     WebClient Client = new WebClient(); 
     public string _text = "qwert"; 

     public AsyncCompletedEventHandler dc { get; set; } 
     public DownloadProgressChangedEventHandler pc { get; set; } 

     public void Download(string url, string path) 
     { 
      Client.DownloadProgressChanged += this.pc; 
      Client.DownloadFileCompleted += this.dc; 
      Client.DownloadFileAsync(new Uri(url), path); 
     } 
    } 
} 

: 내 플러그인의

하나 같이 찾고 있습니다. 대부분의 플러그인은이 샘플과 동일합니다. 나는 플러그인의 동일한 유형으로 플러그인의 인스턴스를 생성해야합니다.

나는 잘못된 승인을 사용하고 있다고 생각하는데, 누군가 제게 몇 가지 예를 줄 수 있습니까?

최고 감사합니다,

답변

0
MEF의 요점은 호스트 코드에서 플러그인/서비스를 분리하는 것입니다

(그리고 서로에서).

플러그인 유형과 직접 상호 작용해야하는 경우 MEF에서 어떤 이점도 얻지 못합니다.

기본 IDownloadManager 인터페이스를 노출하고 내보내려고 할 수 있지만 MEF를 유용하게 사용할 것인지 결정해야합니다.

+0

빠른 답변 주셔서 감사합니다. hones이기 위해서, 나는 플러그인 시스템에 대해 완전히 초보자 다. 나의 애플리케이션에 플러그인 지원을 추가 할 수 있다면 mef를 사용하지 않아도된다. 플러그인 시스템은 데이터베이스에서 권한이 부여 된 부분을 가져 오기 때문에 필요합니다.이 방법을 사용하면 하나의 플러그인 만 업데이트하거나 전체 응용 프로그램을 업데이트하지 않고 새로운 기능을 추가 할 수 있습니다. 모든 플러그인에 대한 인터페이스를 선언하면이 플러그인을 계속 업데이트 할 수 있지만 그럴 때 동일한 플러그인에 메소드를 추가 할 수 없거나 새로운 플러그인을 추가 할 수 없습니다. – Xhays

+0

@ Xhays : 플러그인 코드와 앱 코드를 분리하려면 안정적인 인터페이스가 있어야합니다. 기존 플러그인에는 없기 때문에 어떤 작업을 하든지 관계없이 메소드를 추가 할 수 없습니다. 어려운 버전 관리 세계에 오신 것을 환영합니다. – SLaks

+0

조언 해 주셔서 감사합니다. Visual Studio에서 Quick Watch를 "((Plugins.DownloadManager) PController.GetPlugin ("DownloadManager ")))")로 사용해보십시오. PController.GetPlugin은 부분의 IPlugin을 반환합니다. 플러그인의 모든 변수와 메소드를 검사 할 수있게 해줍니다. (플러그인 dll은 응용 프로그램을 참조하지 않습니다). 하지만 플러그인의 참조를 설정하려고해도 동일한 명령 줄이 내 코드에서 작동하지 않습니다. 플러그인 메소드를 검사하기 위해 vs를 사용하는 메커니즘의 종류를 아십니까? – Xhays

관련 문제