我在Prism中遇到了一些奇怪的MEF行爲,我無法真正解釋它。我找到了解決辦法,我不太滿意,所以我很想知道是什麼原因造成的。從棱鏡4中的CompositionContainer中獲取一個新的Shell實例MEF
我宣佈我的shell窗口類的PartCreationPolicy
的NonShared
。我試圖用我的MefBootstrapper
中的CompositionContainer.GetExportedValue<>()
函數來創建一個新的Shell實例。
奇怪的是,如果我在創建shell之前調用Container.GetExportedValue<>()
,那麼每次我調用它時,都會得到一個新的對象Shell
。但是,一旦shell已經初始化,重複調用Container.GetExportedValue<>()
就會返回Shell的同一個實例。
就好像shell初始化以某種方式重新註冊我的Shell導出爲Shared。
但是,我沒有看到明確嘗試實現這一目的的引導程序代碼中的任何調用。
誰能解釋:
- 什麼動作都有這種副作用
- 如何(如果可能)恢復
NonShared
行爲,這樣我就可以創建一個使用MEF /服務定位多發炮彈。
乾杯,
馬克
只是一些想法。如果GetExportedValue與Lazy協同工作,那麼您的CreationPolicy NonShared將不起作用,因爲Lazy.Value總是被共享。 – blindmeis
這並不能解釋爲什麼我在初始化shell之前得到不同的實例。 – Mark