2010-08-05 65 views
1

我正在寫一個小插件體系結構,我決定使用MEF 我被告知必須使用配置文件。簡單的插件與MEF。我可以使用配置文件加載插件文件

是否有任何使用Mef和配置文件的例子?

我需要的是如何在配置文件中設置mef是可能的嗎?這是一個小諾迪的例子,我已經建立,以測試它,我錯過了loadPlugin功能和配置文件,您可以幫助

諾迪例如

     //MyCompany.Payment.Contracts.dll 

     public interface IPayment 
     { 
      bool Pay(); 
     } 
     //MyCompany.Payment.ServiceProviderOne.dll 
      [Export(typeof(IPayment))] 
     public class ServiceProviderOne:IPayment 
     { 
      public bool Pay(return true); 
     } 
     //MyCompany.Payment.ServiceProviderTwo.dll 
      [Export(typeof(IPayment))] 
     public class ServiceProviderTwo:IPayment 
     { 
      ?public bool Pay(return true); 
     } 

     //Main Console.Applicaiton 
     class Program 
      { 
       static void Main(string[] args) 
       { 
        HelperPlugin helperPlugin =new HelperPlugin(); 
        List<IPayment> myLoadedPayments= helperPlugin.GetPlugins(); 

        //blahhh conti 
       } 
      } 

      public cass HelperPlugin 
      { 
       [ImportMany(typeof(IPayment))] 
       public List<IPayment>Payments { get; set; } 

       public List<IPayment>GetPlugins() 
       { 
        Payments=new List<IPayment>(); 
        LoadPlugins(); 

        return Payments; 
       } 

       private void LoadPlugins() 
       { 
       ??? 
       } 
      } 

配置文件是什麼樣子的?

感謝您的任何建議或代碼片段

回答

1

我工作的一個類似的問題,現在,我的做法是這樣的:

  • 我打算要定義一個配置文件如何我CompositionContainer將配置
  • 我的配置應該包含目錄列表的容器進行掃描(通過使用DirectoryCatalog指定每個目錄)
  • 和我的配置也應該支持assemb列表謊言可能被存儲在別處,這將通過幾個AssemblyCatalog使用具有用於此目的

所以基本上包括在內,我想配置各個目錄,使我的AggregateCatalog該組合容器將使用找到零件。不幸的是,現在還沒有 - 所以這只是我的頭腦 - 現在還沒有代碼。

1

我在最近的一個項目中做的是在界面中包含一個Name屬性。我希望可以訪問的所有擴展都已加載,然後一個配置文件設置列出了我想要使用的名稱。我使用循環來檢查已加載的擴展,如果它們是在設置中命名的,我將它們添加到內部列表中。

我的要求是有一個特定的擴展名使用順序,所以這個解決方案爲我工作。

我可以在程序集中包含元數據來完成同樣的事情,但希望信息更加明顯,並且是合同的一部分。