2015-10-26 52 views
-1

我有問題:與注入服務的彈出應在shell加載後,它的東西像登錄窗體,所以我提高它在「加載」事件上貝殼。Prism5 + Unity,如何加殼和所有模塊加載彈出

<i:EventTrigger EventName="Loaded"> 
    <interactivity:InvokeCommandAction Command="{Binding OnShellLoadedCommand}"/> 
</i:EventTrigger> 

它CreateShell後會發生()的引導程序

protected override DependencyObject CreateShell() 
{ 
    return Container.Resolve<Shell>(); 
} 

隨着prism`s服務的所有權利,但問題發生與共享服務,因爲CreateShell後模塊load()和我得到的例外。加載shell之後如何提高彈出窗口的好習慣是什麼?

+0

你是什麼意思的「共享服務」? ConfigureContainer在CreateShell之前被調用,因此所有Prism的服務都應該在加載Shell時準備好。 –

+0

另外,你確定這個異常沒有從「OnShellLoadedCommand」回調中拋出嗎? –

+0

您試圖使用的服務是否存在於與shell不同的模塊中,並且您正試圖在模塊加載之前調用這些服務? –

回答

0

您需要重新考慮如何顯示登錄屏幕。如果你的服務存在於一個模塊中,顯然你不能創建和使用它,直到它已經加載並註冊到容器中。所以你有幾個選擇。將您的登錄彈出窗口移動到模塊中的視圖中,並將觸發器放置在您使用IModule show/initialize中的RegisterViewWithRegion的視圖上。然後使用該視圖的加載事件。我實際上會在實際顯示shell之前顯示您的登錄對話框。如果登錄成功,則顯示Shell,如果失敗,可以關閉該應用程序。無論哪種方式,您都不能使用尚未加載的服務。因此,將登錄彈出窗口移動到包含該服務的模塊,或將登錄服務移動到外殼中,以便在外殼加載時使用它。