2012-05-03 10 views
0

MEFを使用してプラグインスタイルのアーキテクチャを作成していますが、Imが合成例外を取得しています。パートからのエクスポートを取得できません

ここに詳細があります。

私は次のコードを持っている:私は次の例外がスローされ得る

if (!this.pluginDictionary.ContainsKey(plugin.Value.ModuleName)) 

Exception = {"The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information. 1) The calling thread must be STA, because many UI components require this.

これは、すべての仕事をしていたし、私は私を変えた行で

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)) 
    { 
    } 
} 

をプラグインはSystem.Windows.Windowクラスから継承します。これが失敗の原因となりますか?

HERESにプラグインヘッダ:GX3ClientPluginはSystem.Windows.Windowクラスを拡張

[Export(typeof(IGX3PluginInterface))] 
public partial class MainWindow : GX3ClientPlugins.GX3ClientPlugin 

。これは完全な関連性があるが、いけない

イムかなり確信してyunderstandそれ:) http://mef.codeplex.com/discussions/81717

私はあなたが必要とする他のどのような情報教えてください?

答えて

2

例外はMEF関連ではありませんが、MEFが作成しようとすると、WPFウィンドウのコンストラクタによってスローされます。例外状態として、WPFウィンドウはSTA以外のスレッドで作成するのが好きではありません。

私はあなたがこのエラーを取得される可能性がありますなぜ二つの異なる理由を考えることができます:アプリケーションのMainエントリポイントがSTAThread属性を持っていないので、あなたのメインスレッドは、STAスレッドではありません

1) 。

2)メインスレッドではない別のスレッドでComposePartsを呼び出していますが、他のスレッドはsetting the apartment stateApartmentState.STAなしで作成されています。

参考情報other questionも参照してください。

+0

ありがとうございます。お返事ありがとうございます。 – user589195

関連する問題