如何在MEF中按需动态加载插件?

问题描述 投票:0回答:1

当我们的应用程序运行时,我们希望它偶尔轮询新插件,并在发现新插件时加载它们。我们不只是希望在启动时加载插件。 MEF有可能吗?我们已经通过反射完成了它,但是MEF提供了一个不错的插件框架,如果可能的话,我们希望使用它。

c# .net reflection mef
1个回答
0
投票

您可以使用DirectoryCatalog class来执行扫描文件夹中所有dll程序集的操作。它还具有Refresh method,如果发现更改,它将重新扫描目录并刷新容器。这将触发容器中的ExportsChanged event,该容器还包含有关发生了什么更改的信息。

这里是一个非常基本的示例,演示了如何执行此操作:

class Program
{
   static void Main(string[] args)
   {
      DirectoryCatalog catalog = new DirectoryCatalog("plugins", "*.dll");
      CompositionContainer container = new CompositionContainer(catalog);
      container.ExportsChanged += Container_ExportsChanged;
      Console.WriteLine("Copy new plugins and press any key to refresh them.");
      Console.ReadKey();
      catalog.Refresh();
      Console.ReadLine();
   }

   private static void Container_ExportsChanged(object sender, ExportsChangeEventArgs e)
   {
      Console.Write("Added Exports: ");
      Console.WriteLine(string.Join(", ", e.AddedExports));
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.