我在Prism中遇到了一些奇怪的MEF行为,我无法解释。我已经找到了解决方法,我不太满意,所以我真的很想了解是什么导致它。
我已经使用PartCreationPolicy
NonShared
声明了我的shell窗口类。我正在尝试使用CompositionContainer.GetExportedValue<>()
中的MefBootstrapper
函数来创建Shell的新实例。
奇怪的是,如果我在创建shell之前调用Container.GetExportedValue<>()
,每次调用它时都会得到一个类型为Shell
的新对象。但是,一旦初始化了shell,对Container.GetExportedValue<>()
的重复调用将返回Shell的相同实例。
就好像shell初始化以某种方式将我的Shell导出重新注册为Shared。
但是,我没有在bootstrapper代码中看到任何明确尝试实现此目的的调用。
任何人都可以解释:
NonShared
行为,这样我就可以使用MEF / ServiceLocator创建多个shell。干杯,
标记
答案 0 :(得分:0)
here是您的多个shell问题的答案。你必须检查NonShared行为是否在那里得到解答。
答案 1 :(得分:0)
我不确定Prism如何使用MEF,但这是一个理论:如何在正常启动时创建shell?我的猜测是,它不是通过从MEF容器调用GetExportedValue,而是通过调用Shell的构造函数,然后通过ComposeParts()或使用CompositionBatch将其添加到容器。以这种方式直接添加到容器中的部件将覆盖目录中可用的部分,并且CreationPolicy也不适用(因为MEF不会创建该部分)。