我們正在研究使用C#,WPF4,Prism4和MEF的新應用程序。該應用程序包括一個主外殼窗口,該窗口定義了包含一些分離器和五個區域的網格,以及通過查看發現和視圖注入爲各個區域提供UI功能的多個獨立模塊。所有標準的東西,沒有什麼特別的。該應用程序非常基本,一切正常,即模塊在運行時將其視圖正確地提供給shell的區域。在MFC CView中託管時未填充棱鏡外殼區域
我們還需要將相同的shell(以及來自貢獻模塊的UI)託管到我們擁有的大型舊式MFC應用程序中。這是我們遇到問題的地方。 WPF/MFC互操作代碼(使用HwndSource)似乎工作正常,正如shell可以正確顯示爲父MFC CView的子節點一樣,並且具有基本功能,如在shell本身中定義的網格分離器。但是,shell中沒有任何區域正在填充Prism模塊中定義的視圖。調試顯示模塊確實正在加載,但是,注入到每個模塊的IRegionManager實例包含模塊的視圖添加到的零區域。就好像棱鏡沒有意識到shell完全定義了任何區域,因此,試圖將視圖添加到這些「不存在」的區域失敗了。
我們派生了一個新的自定義引導程序類,我們的MFC代碼調用Run()方法。這個引導程序類與獨立應用程序中的等價物相同(工作正常),唯一的區別是我們不再覆蓋InitializeShell()方法,我們只依賴基類實現。通常,這個方法被覆蓋以將Application.Current.MainWindow設置爲shell,然後顯示shell,但是在我們的例子中,沒有當前的應用程序,因爲我們託管在MFC應用程序中。嘗試覆蓋Bootstrapper的運行功能以控制MFC應用程序在適當的時間顯示外殼程序失敗(在shell的區域仍未填充,但外殼仍顯示的情況下失敗)。
是否有人在MFC應用程序中成功使用了Prism 4(具體來說,獲取了shell區域)?任何關於如何在MFC CView中託管帶區域的啓用Prism的shell並讓MFC應用程序啓動引導過程的建議將不勝感激。謝謝。