我正在尝试创建一个包含两个 shell 的应用程序:
- 登录外壳
- 公共外壳
我成功使用 PRISM 和 MEF 同时创建了两个 shell,但是我怎样才能先制作登录 shell,登录成功后我需要创建公共 shell?
谢谢
为什么不用两个单独的模块来处理这个问题,一个叫做 MainModule,有公共 shell,另一个叫做 AuthenticateModule,有 loginView。为了在 shellView 上显示 LoginView,你应该考虑加载模块的顺序和模式登录视图。最后我想说的是,你可以使用 Mef 或 Unity 来做到这一点。
在你的引导程序中:
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow.Show();}
你也应该加载你的 AuthenticateModule :
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
Type authenticationModuleType = typeof(AuthenticationModule.AuthenticationModule);
ModuleCatalog.AddModule(new ModuleInfo(authenticationModuleType.Name, authenticationModuleType.AssemblyQualifiedName));
并在您的 AuthenticationModule 中:
public class AuthenticationModule : IModule
{
...
public void Initialize()
{
LoginView _loginView = _container.Resolve<LoginView>();
if (_loginView != null)
{
_loginView.Owner = Application.Current.MainWindow;
_loginView.Show();
}
}
几天前我们遇到了同样的问题,我们妥协解决了,因为以下情况:
提示用户登录
如果成功:启动用户会话和应用程序主窗口
其他:留在登录窗口
如果用户退出,返回登录窗口
登录在一个单独的窗口中,引导程序在登录成功时运行。登录窗口是隐藏的,直到用户注销。