在新的App Domain中加载shell窗口和模块

时间:2014-11-28 20:15:23

标签: c# prism appdomain modularity

我知道如果您想要在单独的应用程序域中加载PRISM模块以便可以加载和卸载它们,那么需要克服巨大的障碍。我试图在新的应用域中加载所有内容。这包括shell窗口(包含视图区域),引导程序和模块。

我构建了一个示例解决方案,模仿我需要的方式来实现我们正在尝试转换的当前软件。目前,这包括基本上加载一些设置的EXE,一个Core类和Wrapper类,用于处理加载app域,加载shell窗口和模块发现(Core创建新的app域并将Wrapper的一个实例加载到其中当Wrapper发现模块并实例化shell时,最后是shell本身,负责按需显示shell和加载模块。

我遇到的问题是,当Wrapper类加载到新的App域时,一切都运行没有异常,但模块永远不会显示(进一步挖掘显示视图永远不会添加到viewregion,显然是因为viewregion永远不会添加到RegionManager中的区域。如果我在原始App域中实例化Wrapper,那么一切正常。

我试图弄清楚为什么会发生这种情况以及是否有解决办法。我知道这个过程似乎很复杂,但它是我们拍摄的方法,原因各种各样。任何关于我遇到ViewRegion和App Domain问题的帮助都会非常感激。 以下是解决方案的链接:https://gist.github.com/fb8f989f42ceb3f4ee56.git

1 个答案:

答案 0 :(得分:0)

首先,在Git上看起来我的代码不再存在。如果有人需要,我有一个可以分享的示例解决方案。

问题源于以下事实:从未创建指定为ViewRegion的DependencyObject。在RegionManager内部,检查DependecyObject以查看它是否在DesignMode中,如果返回true,则会导致不调用CreateRegion。这是另一个问题,他的回答有助于解释问题及其解决方法。

How to use Prisim within an ElementHost