C# 无法从部件获取导出

C# 无法从部件获取导出,c#,.net,exception-handling,mef,C#,.net,Exception Handling,Mef,我正在使用MEF创建一个插件式的架构,但是我得到了一个合成异常 这里是细节 我有以下代码: AggregateCatalog catalog = new AggregateCatalog(); catalog.Catalogs.Add(new DirectoryCatalog(pluginDirectory)); CompositionContainer container = new CompositionContainer(catalog); container.ComposeParts(t

我正在使用MEF创建一个插件式的架构,但是我得到了一个合成异常

这里是细节

我有以下代码:

AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(pluginDirectory));
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);

// add to dictionary
foreach (Lazy<IGX3PluginInterface> plugin in plugins)
{
    if (!this.pluginDictionary.ContainsKey(plugin.Value.ModuleName))
    {
    }
}
我将引发以下异常:

Exception={”该组合产生了一个组合错误。下面提供了根本原因。有关详细信息,请查看CompositionException.Errors属性。1)调用线程必须是STA,因为许多UI组件都需要此线程

这一切都正常,然后我将插件更改为从System.Windows.Window类继承。这可能是导致失败的原因吗

以下是插件标题:

[Export(typeof(IGX3PluginInterface))]
public partial class MainWindow : GX3ClientPlugins.GX3ClientPlugin
其中GX3ClientPlugin扩展了System.Windows.Window类

我很确定这是相关的,但不要完全理解它:)


请告诉我您还需要什么信息?

异常实际上与MEF无关,但在MEF尝试创建它时由WPF窗口的构造函数引发。根据异常状态,WPF窗口不希望在非STA线程上创建

我可以想出两个不同的原因来解释为什么会出现此错误:

1) 主线程不是STA线程,因为应用程序的
main
入口点没有该属性

2) 您正在非主线程的另一个线程上调用
ComposeParts
,而该另一个线程是在不使用
ApartmentState.STA
的情况下创建的


另请参阅此内容。

谢谢。我们会检查这些内容,然后再给您回复
[Export(typeof(IGX3PluginInterface))]
public partial class MainWindow : GX3ClientPlugins.GX3ClientPlugin