我正在使用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))
{
}
}
在线:
if (!this.pluginDictionary.ContainsKey(plugin.Value.ModuleName))
我抛出了以下异常:
Exception = {“组合产生了一个组合错误。根本原因在下面提供。查看CompositionException.Errors属性以获取更多详细信息.1)调用线程必须是STA,因为许多UI组件都需要这个。< / p>
这一切都正常,然后我改变了我的插件继承System.Windows.Window类。这会导致失败吗?
继承插件标题:
[Export(typeof(IGX3PluginInterface))]
public partial class MainWindow : GX3ClientPlugins.GX3ClientPlugin
GX3ClientPlugin扩展System.Windows.Window类。
我很确定这是相关的,但不要完全理解它:) http://mef.codeplex.com/discussions/81717
请告诉我您需要的其他信息?
答案 0 :(得分:2)
该异常与MEF无关,但是当MEF尝试创建它时,由WPF窗口的构造函数抛出。正如异常所述,WPF窗口不喜欢在非STA线程上创建。
我可以想到您可能会遇到此错误的两个不同原因:
1)您的主线程不是STA线程,因为您的应用程序的Main
入口点没有STAThread属性。
2)您正在另一个不是主线程的线程上调用ComposeParts
,而另一个线程是在没有setting the apartment state到ApartmentState.STA
的情况下创建的。