[英]How can plugins be loaded dynamically and on-demand in MEF?
当我们的应用程序运行时,我们希望它偶尔轮询新插件并在找到时加载它们。 我们不只是希望在启动时加载插件。 MEF可以做到吗? 我们已经通过反射完成了它,但是 MEF 提供了一个很好的插件框架,如果可能,我们希望使用它。
您可以使用DirectoryCatalog 类扫描文件夹中的所有 dll 程序集。 它还有一个Refresh 方法,如果发现更改,它将重新扫描目录并刷新容器。 这将触发容器中的ExportsChanged 事件,该事件还包含有关发生了哪些更改的信息。
这是一个非常基本的示例,演示了如何执行此操作:
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));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.