Во-первых, мы в C#, WPF, настольном приложении (может быть .NET 3.5).
Мне нужно показать окно входа в систему при запуске приложения, если вход в систему выполнен успешно, скрыть окно входа и показать главное окно приложения. Кроме того, при закрытии главного окна снова должно появиться окно входа в систему. Если окно входа закрыто, приложение закрывается.
Бонус, чтобы усложнить задачу: когда установлен флажок «Запомнить пользователя», окно входа в систему пропускается, и пользователь входит в систему автоматически, отображая главное окно сразу. (пожалуйста, не думайте о том, как хранится параметр, предположим, что вы просто знаете его и имеете значение в переменной).
Что должно быть точкой запуска приложения (означает, какое окно считается в свойстве app.xaml StartupUri)?
Как бы вы решили архитектуру? Лучший способ использовать событие App_Startup и показать какое-то окно с этой точки?
Какой тип App.ShutdownMode вы бы использовали? И как это будет работать? Вы можете использовать «OneLastWindowClose», «OnMainWindowClose» или «OnExplicitShutdown». Каков ваш выбор и почему?
В общем, меня интересует, «что вызывает что, что такое «корень» приложения, что вызывает закрытие приложения».
У меня уже есть решение моей проблемы, которое работает, но мне интересно, сталкивался ли кто-нибудь из вас с этой проблемой и как вы ее решили? Я с удовольствием поделюсь своим подходом, но в первую очередь не хочу ограничивать ваши идеи.
Спасибо за ваш вклад.
P.S.: Я использую инфраструктуру MVVM, что делает ее немного более запутанной, но смысл остается. Я также использую Ninject в качестве IoC, но эта проблема, конечно, остается. Я не упомянул эту информацию, чтобы сделать вопрос как можно более ясным. Я также должен обрабатывать исключения (связь с сервером или базой данных во время входа в систему может завершиться неудачно), и, чтобы сделать это действительно интересным, я должен показать интерактивную «заставку», указывающую, что делает приложение (загрузка, связь с сервером, автологин). Но, пожалуйста, держитесь подальше от этих требований на данный момент, мы можем обсудить их позже.