gpt4 book ai didi

c# - MEF 组合和导入选择中的拦截

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:23 25 4
gpt4 key购买 nike

大家

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

我有三种方法:

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

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

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

最佳答案

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

编辑:我喜欢您的第 3 条建议,我认为这一条可能很简单。您的包装器使用 [ImportMany] 处理真实接口(interface),插件向您的包装器请求 GetTheOneInterface()。

关于c# - MEF 组合和导入选择中的拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9188738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com