Мы работаем над новым приложением, которое использует C #, WPF4, Prism4 и MEF. Приложение содержит главное окно оболочки, которое определяет сетку с несколькими разделителями и пятью областями, а также ряд отдельных модулей, которые предоставляют функциональные возможности пользовательского интерфейса в различные области через обнаружение представления и внедрение представления. Все стандартные вещи, ничего экзотического. Приложение очень простое, и все работает нормально, то есть модули правильно передают свои представления в регионы оболочки во время выполнения.
У нас также есть требование разместить ту же оболочку (и пользовательский интерфейс из участвующих модулей) в большом унаследованном приложении MFC. Вот где у нас проблемы. Код взаимодействия WPF / MFC (использующий HwndSource), кажется, работает нормально, о чем свидетельствует тот факт, что оболочка отображается правильно как дочерний элемент родительского MFC CView и имеет базовые функциональные возможности, такие как разделитель сетки, который определен в самой оболочке. , Однако ни одна из областей оболочки не заполняется представлениями, определенными в модулях Prism. Отладка показывает, что модули действительно загружаются, однако экземпляр IRegionManager, который внедряется в каждый модуль, содержит нулевые области, в которые модуль может добавить свои представления. Как будто Prism не знает, что оболочка вообще определяет какие-либо области, следовательно, попытки добавить представления в эти «несуществующие» области заканчиваются неудачей.
Мы получили новый пользовательский класс начальной загрузки, в котором наш код MFC вызывает метод Run (). Этот класс начальной загрузки идентичен его эквиваленту в автономном приложении (которое работает нормально), единственное отличие состоит в том, что мы больше не переопределяем метод InitializeShell (), мы просто полагаемся на реализацию базового класса. Обычно этот метод переопределяется, чтобы установить Application.Current.MainWindow в оболочку и затем показать оболочку, однако в нашем случае нет текущего приложения, потому что мы размещены внутри приложения MFC. Различные попытки переопределить функциональность запуска Bootstrapper, чтобы вернуть управление приложению MFC для отображения оболочки в соответствующее время, не увенчались успехом (в том смысле, что регионы оболочки все еще не заселены, но оболочка все еще отображается).
Кто-нибудь успешно использовал Prism 4 (в частности, заполнил регионы оболочки) в приложении MFC? Будем благодарны за любые советы о том, как разместить оболочку с поддержкой Prism с регионами в MFC CView и заставить приложение MFC инициировать процесс начальной загрузки. Спасибо.