gpt4 book ai didi

c# - 使用 MEF 加载多个插件实例

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

在我上一个应用程序中,使用 MEF 加载插件一切正常,但现在我遇到了一个新问题。我有一个解决方案,我会在这个问题的末尾解释,但我正在寻找其他方法来做到这一点。

假设我有一个名为 ApplianceInterface 的接口(interface)。我还有两个继承自 ApplianceInterface 的插件,我们称它们为 Blender 和 Processor。现在,我想在我的应用程序中有多个 blender 和处理器,但我不确定如何正确实例化它们。

以前,我会简单地使用 ImportMany 属性,并且在调用 ComposeParts 时,我的应用程序会加载 Blender 和 Processor。例如:

[ImportMany(typeof(ApplianceInterface))]
private IEnumerable<ApplianceInterface> Appliances { get; set; }

我的 Blender 和 Processor 插件的属性如下:

[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(MyInterface)]
public class Blender : ApplianceInterface
{
...
}

但这最终对我来说是用一个 blender 和一个处理器填充设备。我需要能够创建任意数量的 Blender 和 Processor 对象。

现在,从文档中我了解到 [PartCreationPolicy(CreationPolicy.NonShared)] 允许 MEF 每次创建一个新实例,但是是否有类似的“神奇”方式来创建一个使用 MEF 的特定实例数?到目前为止,我一直依靠 [Import][ImportMany] 来解析程序集。

我唯一的选择是使用全局容器,然后使用 GetExportedValue<> 手动解析导出吗?我已经尝试过 GetExportedValue<> 并且该实现对我来说工作正常,但我只是好奇是否有更好、更可接受的方法来做到这一点。

更新

我刚刚意识到一个大错误,GetExportedValue<> 并不是我真正想要的。我正在迭代一个 IEnumerable,当我得到一个匹配项(基于某些参数)时,我想实例化一个具有当前值的新对象。在我有两个都导出 ApplianceInterface 的不同插件的情况下,GetExportedValue<> 最终失败。

我认为我的问题现在有所不同,可能是特定于 C# 的问题。

最佳答案

ExportFactory 是您正在寻找的,但它目前仅在 Silverlight 中可用。这是一个解释如何在桌面上处理此问题的问题:Multiple Instances of a single MEF DLL

关于c# - 使用 MEF 加载多个插件实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961552/

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