MEF中的共享应用程序资源

时间:2013-09-25 13:09:13

标签: c# .net api plugins mef

为了动态地向应用程序添加功能,我非常依赖MEF,它是为第三方程序集(插件)提供接口的绝佳工具。但是现在,我不仅需要一个可以从我的主应用程序访问的插件的通用接口,而且还提供插件接口,通过它可以从我的主应用程序访问各种资源(例如对象)。怎么可以这样做?我正在考虑像插件API这样的东西,但我不确定MEF是否提供这样的选项。

我为此任务考虑了两个选项:

  • 在插件实例化中将对象作为参数传递

缺点:如果我通过,请说明,例如我在其他地方使用的日志对象实例,第三方插件可以轻松调用Dispose,使其无法用于整个应用程序或其他插件。非常危险!

  • 声明全局可访问的静态方法

1 个答案:

答案 0 :(得分:1)

您可能希望使用注入...而不是构建插件或在某处使用静态实例。

您实际上可以将其他对象注入您的插件。最常见的是[ImportingConstructor]

如果其他对象没有实现任何MEF导出,则可能无法使用此MEF功能,如果是这种情况,您也可以将其结合使用,例如: Unity注入您的MEF插件,以便您的插件可以使用统一容器来解决某些问题。这有点棘手,但有一些解决方案。您可能希望阅读一篇旧的但仍然有效的博文: http://pwlodek.blogspot.de/2009/05/unity-mef-integration-layer.html