【问题标题】:How could I know if all my modules are loaded in prism 4?我怎么知道我的所有模块是否都加载到 prism 4 中?
【发布时间】:2015-05-20 23:31:26
【问题描述】:

我有一个使用 PRISM 的 WPF 桌面应用程序,有 12 个相互不依赖的模块,每次我启动 shell 时,都会加载模块,关键是我想知道哪个模块在最后,这样我就可以开始行动了。我如何确定这一点?

【问题讨论】:

  • 你的意思是要在所有模块加载完毕后触发动作?您的代码中是否有一个位置可以加载所有模块?或者您可以记录模块的初始化吗?
  • 我喜欢在我的所有模块都加载完毕时引发一个事件。应用程序不知道要加载多少个模块,这些模块位于目录“.\modules”中。

标签: c# wpf prism prism-4


【解决方案1】:

重写 Bootstrapper.InitializeModules,调用 base,然后 ACTION!

【讨论】:

  • 感谢 erikH,这正是我所需要的。
【解决方案2】:

扩展 erikH 的回答(谢谢,顺便说一句),假设您是从默认的 UnityBootstrapper 派生的,这里是调用通常被覆盖的方法的顺序:

//0
public override void Run(bool runWithDefaultConfiguration)
{
    base.Run(runWithDefaultConfiguration);
    //this is our last opportunity to hook into the PRISM bootstrapping sequence; at this point every very other base-overridden 
    //method has been executed
}

//1
protected override void ConfigureModuleCatalog()
{
    base.ConfigureModuleCatalog();
    ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
    //add modules...
}

//2
protected override void ConfigureContainer() 
{
    base.ConfigureContainer();
    //register everything with the container...
}

//3
protected override DependencyObject CreateShell()
{
    return Container.Resolve<ShellView>();      //resolve your root component
}

//4
protected override void InitializeShell()
{
    base.InitializeShell();
    App.Current.MainWindow = (Window)Shell;
    App.Current.MainWindow.Show();
}

//5
protected override void InitializeModules()
{
    base.InitializeModules();
}

请注意,这适用于 PRISM 4 和 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2011-04-03
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多