2

每个人

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

我有三种方法:

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

  2. 拦截 MEF 组合。我不确定这是否可能,我不知道如何。但是如果有办法让我们在合成过程中进行拦截,这可能是最好的。

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

4

1 回答 1

2

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

编辑:我喜欢你的建议 3,我认为这很容易。您的包装器使用 [ImportMany] 处理实际接口,插件向您的包装器询问 GetTheOneInterface()。

于 2012-02-08T06:29:22.107 回答