1

Prism で MEF の奇妙な動作に遭遇しましたが、これについては説明できません。あまり満足していない方法を見つけたので、何が原因なのかを本当に理解したいと思います.

シェル ウィンドウ クラスをPartCreationPolicyof で宣言しましたNonShared。そして、シェルの新しいインスタンスを作成するためにCompositionContainer.GetExportedValue<>()my の関数を使用しようとしています。MefBootstrapper

奇妙なことContainer.GetExportedValue<>()に、シェルが作成される前に呼び出すShellと、呼び出すたびに type の新しいオブジェクトが取得されます。ただし、シェルが初期化されるとContainer.GetExportedValue<>()、シェルの同じインスタンスを返す呼び出しが繰り返されます。

シェルの初期化により、シェルのエクスポートが共有として再登録されるようです。

ただし、明示的にこれを達成しようとするブートストラップ コードの呼び出しは見当たりません。

誰でも説明できますか:

  1. この副作用を持つアクションは何ですか
  2. NonSharedMEF/ServiceLocator を使用して複数のシェルを作成できるように、(可能であれば) 動作を復元する方法。

乾杯、

マーク

4

2 に答える 2

0

これは、複数のシェルに関する質問に対する回答です。NonShared 動作がそこで回答されているかどうかを確認する必要があります。

于 2011-10-20T11:04:52.087 に答える
0

Prism がどのように MEF を使用しているかはわかりませんが、ここに理論があります。シェルは通常の起動時にどのように作成されるのでしょうか。私の推測では、MEF コンテナーから GetExportedValue を呼び出すのではなく、シェルのコンストラクターを呼び出してから、ComposeParts() を介して、または CompositionBatch を使用してコンテナーに追加します。この方法でコンテナーに直接追加されたパーツは、カタログで使用可能なものをオーバーライドし、CreationPolicy も適用されません (MEF がそのパーツを作成していないため)。

于 2011-10-21T15:23:44.737 に答える