是否可以使用 MEF 进行插件"bundles"?



我目前正在扩展现有的WPF应用程序以使用各种扩展。主要是为了拥有一个通用的 UI 平台,该平台加载由使用它的特定团队开发的插件。其中一些扩展可能相互依赖(例如,树控件插件和画布,您可以在其中拖动树中的内容)。这可能(并且建议)与 MEF 有关吗?

我想通过一个由属于一起的插件导出的通用接口来执行此操作,但我不确定这是否是 MEF 的好做法。

由于你使用 MEF 来管理依赖项,因此请遵循依赖项反转原则来描述它们。

如果您的一个插件需要另一个插件才能正常工作,只需导入其实现:

public interface ITreePlugin {}
public interface ICanvasPlugin {}
[Export(typeof(ICanvasPlugin)]
public class CanvasPlugin : ICanvasPlugin 
{
    // treePlugin must be imported
    [ImportingConstructor]
    public CanvasPlugin(ITreePlugin treePlugin) {}
    // ...
}

此示例允许将任何ITreePlugin实现放在容器中。此外,它需要ITreePlugin实现呈现在容器中(请注意,您可以进行可选的导入)。这是您的"插件包"。

不要将特定的插件实现耦合在一起,因为这会使 MEF 使用毫无意义。

最新更新