初始化模块后,您可以显示Shell视图:
protected override void InitializeShell()
{
Application.Current.MainWindow = (Window)Container.Resolve<ShellView>();
}
protected override void InitializeModules()
{
base.InitializeModules();
Application.Current.MainWindow.Show();
}
Run Code Online (Sandbox Code Playgroud)
我找到了一个相对简单的解决方案。
我的应用程序有一个名为 ShellHandler 的类,它在引导程序中实例化并在 Unity 容器中注册为单例:
Container.RegisterType<IShellHandler, ShellHandler>(new ContainerControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud)
我在 ShellHandler 中创建了一个方法,模块可以使用该方法将自己标记为已加载:
/// <summary>
/// Method used to increment the number of modules loaded.
/// Once the number of modules loaded equals the number of modules registered in the catalog,
/// the shell displays the Login shell.
/// This prevents the scenario where the Shell is displayed at start-up with empty regions,
/// and then the regions are populated as the modules are loaded.
/// </summary>
public void FlagModuleAsLoaded()
{
NumberOfLoadedModules++;
if (NumberOfLoadedModules != ModuleCatalog.Modules.Count())
return;
// Display the Login shell.
DisplayShell(typeof(LoginShell), true);
}
Run Code Online (Sandbox Code Playgroud)
最后,在所有模块都实现的 ModuleBase 类中,我创建了一个在初始化过程中调用的抽象方法:
/// <summary>
/// Method automatically called and used to register the module's views, types,
/// as well as initialize the module itself.
/// </summary>
public void Initialize()
{
// Views and types must be registered first.
RegisterViewsAndTypes();
// Now initialize the module.
InitializeModule();
// Flag the module as loaded.
FlagModuleAsLoaded();
}
public abstract void FlagModuleAsLoaded();
Run Code Online (Sandbox Code Playgroud)
现在,每个模块都通过其构造函数解析 ShellHandler 单例的实例:
public LoginModule(IUnityContainer container, IRegionManager regionManager, IShellHandler shellHandler)
: base(container, regionManager)
{
this.ShellHandler = shellHandler;
}
Run Code Online (Sandbox Code Playgroud)
最后他们实现了 ModuleBase 中的 Abstract 方法:
/// <summary>
/// Method used to alert the Shell Handler that a new module has been loaded.
/// Used by the Shell Handler to determine when all modules have been loaded
/// and the Login shell can be displayed.
/// </summary>
public override void FlagModuleAsLoaded()
{
ShellHandler.FlagModuleAsLoaded();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2012 次 |
最近记录: |