MEF组成和导入选择中的拦截

时间:2012-02-08 06:25:05

标签: c# mef interception

大家

问题是,是否存在两个具有相同导出签名的导出组件但只应导入一个(这是可能的,实际示例是安装新插件以替换旧插件而不卸载旧插件。)。我们可以提供一个配置文件来告诉我应该导入哪个组件,但问题是如何告诉MEF正确的选择?

我有三种方法:

  1. 使用自定义目录,过滤可用的插件。但假设A导入组件A和B导入组件B而组件A和B具有相同的导出签名。除了为每个组件创建新的自定义目录外,自定义目录无法处理此问题。

  2. MEF组成中的拦截。我不确定是否可能,我不知道如何。但如果有一种让我们在构图过程中拦截的方法,这可能是最好的。

  3. 使用导入包装而不是真实的界面。构建组件时,它将初始化包装器并让包装器处理选择逻辑(例如提示窗口并让用户选择一个或读取配置)

1 个答案:

答案 0 :(得分:2)

如何使用[ImportMany]获取同一签名的所有可能导入,然后从导入列表中选择您想要的特定条件(配置文件或其他)?

编辑:我喜欢你的建议3,我觉得这个很容易。你的包装器用[ImportMany]处理真正的接口,插件向你的包装器询问GetTheOneInterface()。