2010-08-05 47 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属性。我希望可以访问的所有扩展都已加载,然后一个配置文件设置列出了我想要使用的名称。我使用循环来检查已加载的扩展,如果它们是在设置中命名的,我将它们添加到内部列表中。

我的要求是有一个特定的扩展名使用顺序,所以这个解决方案为我工作。

我可以在程序集中包含元数据来完成同样的事情,但希望信息更加明显,并且是合同的一部分。