C# 无法从部件获取导出
我正在使用MEF创建一个插件式的架构,但是我得到了一个合成异常 这里是细节 我有以下代码: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
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