【问题标题】:Silverlight Prism Module Not ReadySilverlight 棱镜模块未就绪
【发布时间】:2010-06-08 20:55:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: silverlight prism cab


    【解决方案1】:

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

    简单案例:

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

    需要更多信息:

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

    谢谢:

    您不小心在 Stack Overflow 中为another question I asked 的答案提供了线索,非常感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2012-01-05
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多