Я новичок в WPF / Prism и пытаюсь сделать следующее: мне нужно загрузить окно входа в систему (окна или пользовательский элемент управления) перед запуском моего главного окна. После успешного входа в систему удалите представление «Вход в систему» и перейдите в главное окно.
Я рассмотрел несколько ответов здесь, но все они ссылаются на более старые версии PRISM с классом Boostrapper.
У меня есть приложение WPF (Prism 7), которое содержит основной проект и модуль авторизации.
Из моего Основного проекта App.xaml.cs
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule<AuthorizationModule>();
}
В модуле авторизации у меня есть LoginView / LoginViewModel. Модуль авторизации регистрирует LoginService, который будет введен в LoginViewModel
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.Register(typeof(ILoginService), typeof(LoginService));
}
LoginViewModel позаботится о том, чтобы аутентифицировать пользователя с помощью этого LoginService.
Часть ответов, которые я видел, показывает что-то вроде этого:
protected override void InitializeShell()
{
Window login = new LoginView();
var loginVM = new LoginViewModel(new LoginAuth());
loginVM.LoginCompleted += (sender, args) =>
{
login.Close();
Application.Current.MainWindow.Show();
};
login.DataContext = loginVM;
// problem below:
login.ShowDialog();
}
Тем не менее, кажется, что создание экземпляра LoginView вручную вместо того, чтобы делать это за вас, выглядит немного странно.
Кроме того, InitiallizeShell в PRISM 7 ожидает создания текущей оболочки. Я не уверен, следует ли мне использовать это значение, передаваемое для активации главного окна.
protected override void InitializeShell(Window shell)
Я также читал от самого Брайана Лагунаса на Github, чтобы, возможно, использовать EventAggregator (который я пробовал). У меня был модуль авторизации, который регистрирует EventAggregator и из LoginViewModel, при успешном входе в систему, публикует SuccessfulLoginEvent, но я могу выяснить, как подписаться на это событие из основного приложения
Таким образом, в основном ожидаемый результат состоит в том, что когда приложение запускается, если пользователь не вошел в систему, показать LoginView, после того как пользователь сам себя аутентифицирует, перевести его в MainWindow со всеми уже загруженными необходимыми модулями.
Любая помощь будет принята с благодарностью.