私は実際に説明することができないPrismのいくつかの奇妙なMEFの動作を見越しています。私はあまりにも幸せではないので、私は本当にそれが原因で何が起こっているのか理解したいと思います。MEFを使ってPrism 4のCompositionContainerから新しいシェルインスタンスを取得する
PartCreationPolicy
がNonShared
のシェルウィンドウクラスを宣言しました。そして、MefBootstrapper
のCompositionContainer.GetExportedValue<>()
関数を使用して、シェルの新しいインスタンスを作成しようとしています。
シェルが作成される前に私がContainer.GetExportedValue<>()
を呼び出すと、私はそれを呼び出すたびにShell
という新しいオブジェクトを取得します。ただし、シェルが初期化されると、Container.GetExportedValue<>()
への呼び出しを繰り返し実行すると、シェルの同じインスタンスが返されます。
シェルの初期化が何らかの形でシェルのエクスポートを共有として再登録しているかのようです。
しかし、これを明示的に試みるブートストラップコードの呼び出しはありません。
誰が説明することができます:
- 何のアクション方法(可能な場合)
NonShared
動作を復元するために、私はMEF /のServiceLocatorを使用して複数のシェルを作成することができ、この副作用 - を持っています。
乾杯、
マーク
ちょっと考えてください。 GetExportedValueがLazyで動作する場合、Lazy.Valueは常に共有されるため、CreationPolicy NonSharedは機能しません。 – blindmeis
これは、シェルを初期化する前に別のインスタンスを取得する理由を説明しません。 – Mark