現在、C#、WPF4、Prism4、およびMEFを使用する新しいアプリケーションに取り組んでいます。このアプリケーションは、いくつかのスプリッターと5つの領域を備えたグリッドを定義するメインシェルウィンドウと、ビューの検出とビューの挿入を通じてさまざまな領域にUI機能を提供する多数の個別のモジュールで構成されます。すべての標準的なもの、エキゾチックなものは何もありません。アプリケーションは非常に基本的であり、すべてが正常に機能します。つまり、モジュールは実行時にシェルの領域にビューを正しく提供します。
また、同じシェル(および貢献するモジュールのUI)を大規模なレガシーMFCアプリケーションでホストする必要があります。ここで問題が発生します。WPF / MFC相互運用コード(HwndSourceを使用)は正常に機能しているようです。これは、シェルが親MFC CViewの子として正しく表示され、シェル自体で定義されるグリッドスプリッターなどの基本的な機能を備えていることからもわかります。 。ただし、シェル内のどの領域にも、Prismモジュールで定義されたビューが入力されていません。デバッグは、モジュールが実際にロードされていることを示していますが、各モジュールに注入されるIRegionManagerインスタンスには、モジュールがビューを追加するためのゼロ領域が含まれています。Prismは、シェルが領域をまったく定義していないことを認識していないかのようです。その結果、
MFCコードがRun()メソッドを呼び出す新しいカスタムブートストラッパークラスを派生させました。このブートストラッパークラスは、スタンドアロンアプリケーションの同等のクラス(正常に動作します)と同じです。唯一の違いは、InitializeShell()メソッドをオーバーライドせず、基本クラスの実装に依存していることです。通常、このメソッドは、Application.Current.MainWindowをシェルに設定してからシェルを表示するためにオーバーライドされますが、この場合、MFCアプリ内でホストされているため、現在のアプリケーションはありません。Bootstrapperの実行機能をオーバーライドして、適切なタイミングでシェルを表示するためにMFCアプリに制御を戻すさまざまな試みが失敗しました(シェルの領域がまだ入力されていないという意味で失敗しましたが、シェルはまだ表示されています)。
MFCアプリケーション内でPrism4を正常に使用した(具体的には、シェル領域を設定した)人はいますか?MFC CView内のリージョンでPrism対応シェルをホストし、MFCアプリケーションにブートストラッププロセスを開始させる方法に関するアドバイスをいただければ幸いです。ありがとう。