0

我正在使用 Prism(又名复合应用程序指南)构建 Silverlight 4.0 应用程序。我有两个模块,都在我的ModuleCatalog.xaml中定义为WhenAvailable。我的 Application_OnStart 实例化了我的引导程序并调用它的Run()方法。在我的应用程序启动并启动并运行之后(实际上,用户必须单击 UI 中的按钮),然后我尝试加载模块:

foreach (ModuleInfo mi in moduleCatalog.Modules)
    ...
    Type moduleType = Type.GetType(mi.ModuleType); // moduleType ends up null!

有时,moduleType最终为 null。我已经验证,当我遇到 null 时,ModuleInfo 的状态LoadingTypes而不是ReadyForInitialization。我认为这意味着它仍在为我的模块下载单独的 *.xap 文件并将它们的类型带入应用程序域。

那么我能做什么呢?如果我知道有一些事件我可以听以知道它们终于都加载了,我会很乐意阻止。

4

1 回答 1

0

如果您打算使用 Prism,则不应绕过它并自己创建模块。这不是 Prism 应该工作的方式。Prism 不提供加载完成事件,因为这不是您应该需要做的事情。

简单案例:

如果您定义一个模块目录,那么所有这些模块都将逐步加载,因此在这种简单情况下无需手动加载任何模块。您可以在根 Silverlight 应用程序中创建一个带有一些模块依赖项的启动模块,这足以让第一页在加载应用程序的其余部分时可见。

需要更多信息:

我无法从上面的代码片段中看出你实际上想要完成什么,所以更多信息会有所帮助,但你应该使用 Unity 来解析接口,而不是直接使用 Type.GetType()。您通常不需要解析模块本身,并且还有一些方法可以在 Prism 中触发按需加载(目前手边没有它们......将更新此内容)。

谢谢:

您不小心为我在 Stack Overflow 中提出的另一个问题的答案提供了线索,非常感谢。

于 2010-09-14T08:11:00.683 回答