1

我在 Prism 中遇到了一些奇怪的 MEF 行为,我无法真正解释。我找到了一种我不太满意的解决方法,所以我真的很想了解是什么原因造成的。

PartCreationPolicy我已经用of声明了我的 shell 窗口类NonShared。我正在尝试使用CompositionContainer.GetExportedValue<>()我的函数MefBootstrapper来创建一个新的 Shell 实例。

奇怪的是,如果我在创建 shell 之前调用,每次调用它都会Container.GetExportedValue<>()得到一个 type 的新对象。Shell但是,一旦 shell 被初始化,重复调用以Container.GetExportedValue<>()返回相同的 Shell 实例。

就好像外壳初始化以某种方式将我的外壳导出重新注册为共享。

但是,我在引导程序代码中没有看到任何明确尝试实现此目的的调用。

谁能解释一下:

  1. 什么动作有这个副作用
  2. 如何(如果可能)恢复NonShared行为,以便我可以使用 MEF/ServiceLocator 创建多个 shell。

干杯,

标记

4

2 回答 2

0

是您的多个外壳问题的答案。您必须检查那里是否回答了 NonShared 行为。

于 2011-10-20T11:04:52.087 回答
0

我不确定 Prism 如何使用 MEF,但这里有一个理论:在正常启动中如何创建 shell?我的猜测是,它不是通过从 MEF 容器调用 GetExportedValue,而是通过调用 Shell 的构造函数,然后通过 ComposeParts() 或使用 CompositionBatch 将其添加到容器中。以这种方式直接添加到容器的部件将覆盖目录中可用的内容,并且 CreationPolicy 也不会应用(因为 MEF 没有创建该部件)。

于 2011-10-21T15:23:44.737 回答