gpt4 book ai didi

c# - 指示 MEF 使用任何可用的程序集

转载 作者:太空狗 更新时间:2023-10-29 23:48:49 28 4
gpt4 key购买 nike

我第一次在 Visual Studio 2010 beta 2 中使用 .net-4.0 中的 System.ComponentModel.Composition 试用托管扩展框架。

我一直无法让 CompositionContainer 使用下面的两个替代例程找到我的实现程序集。

第一次尝试(这适用于较旧的 MEF codeplex 版本):

var composition = new CompositionBatch();
composition.AddPart(this);
var container = new CompositionContainer(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
container.Compose(composition);

第二次尝试(我认为这在 beta 1 中有效):

var aggregateCatalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
var compositionContainer = new CompositionContainer(aggregateCatalog);
compositionContainer.ComposeParts(this);

在 beta 2 中有没有新的方法来做到这一点?

编辑:事实证明这与构图无关。我有一个代表我导入的实现的静态属性:

[Import] public static ILog Log { get; set; }

应该是:

[Import] public ILog Log { get; set; }

我将 Daniel 的回答标记为已接受,因为以更彻底的方式进行调试的明智建议解决了问题。

最佳答案

什么失败了?是否有您期望满足但不满足的导入?您是否正在调用 GetExports() 而它失败了?

您可以在目录创建后进入调试器,将鼠标悬停在 aggregateCatalog 变量上以检查它并查看其中包含哪些部分。我的猜测是这些部件可能在目录中,而问题出在您的代码中的其他地方。一个可能的原因是您有一个使用 [Import] 属性而不是 [ImportMany] 的集合导入,和/或您的部件被拒绝,因为它们有无法满足的导入。

关于c# - 指示 MEF 使用任何可用的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749131/

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