none
Prism可以在Shell初始化前进行模块初始化吗? RRS feed

  • 问题

  • 各位好!

    我在Prism开发中遇到一个难题:Login作为一个模块(服务)由Container注册,并希望在Shell显示之前调用Login服务。

    所以我在Shell的Loaded中写上Conatiner.Resolve<LoginService>(),发现无法得到LoginService!

    看到Prism的初始化流程中,是先显示Shell,最后才初始化各个模块的,所以Login模块无法在Shell显示前初始化。不知道这个问题该如何解决?

    谢谢!

    • 已更改类型 懵盛盛 2011年3月3日 1:49
    2011年2月28日 9:30

答案

  • 你好,

    其实并不是这样,整个Prism初始化是在 Bootstrapper 中完成的,Shell只是他所调用的第一个View 也是作为一个框架View来载入的。在这之前,我们可以在Bootstrapper中通过Conatiner.Resolve<LoginService>() 来初始化你要的Login模块。当然我们可以看下 InitializeShell 这个方法,在这个里面,我们可以先载入你的Login View然后再继续整个Shell的载入。

    还有种方法是,你可以设计一个你的Splash Screen,然后将这个Splash Screen作为你的Login模块。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 懵盛盛 2011年3月3日 1:49
    2011年3月2日 5:09
    版主

全部回复

  • 你好,

    其实并不是这样,整个Prism初始化是在 Bootstrapper 中完成的,Shell只是他所调用的第一个View 也是作为一个框架View来载入的。在这之前,我们可以在Bootstrapper中通过Conatiner.Resolve<LoginService>() 来初始化你要的Login模块。当然我们可以看下 InitializeShell 这个方法,在这个里面,我们可以先载入你的Login View然后再继续整个Shell的载入。

    还有种方法是,你可以设计一个你的Splash Screen,然后将这个Splash Screen作为你的Login模块。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 懵盛盛 2011年3月3日 1:49
    2011年3月2日 5:09
    版主
  • 谢谢Bob Bao,在Prism的应用中还需要向你学习哦!

    问题已经解决!

     

    之前在InitializeShell中,我已经尝试过把Module添加到Catalog中,且在InitializeShell中尝试Resolve<ILoginService>,但得到的结果是该模块尚未加载!

    原因估计就是ModuleCatalog.LoadModule是在InitializeShell之后执行的,所以无论如何我的Module依然是在Shell之后执行。

    所以我就在InitializeShell中使用ModuleManager.LoadModule,先加载个别需要的Module,然后再在Module中做业务。

    2011年3月3日 1:49