2012-02-09 1 views
2

Я использую Prism для приложения и нуждаюсь в диалоговом окне входа в систему. Чтобы логин был проверен, мне нужно инициализировать некоторые данные приложения, загруженные Prism/MEF, поэтому я не могу положить его в App.xmal.cs OnStartUp, поэтому я поместил диалоговое окно входа в bootstrappers InitializeShell, как этоPrism Login Dialog

protected override void InitializeShell() 
     { 


      Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown; 

      //// Authenticate the current user and set the default principal 
      LoginDialog auth = new LoginDialog(); 
      auth.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
      bool? dialogResult = auth.ShowDialog(); 

      // deal with the results 
      if (dialogResult.HasValue && dialogResult.Value) 
      { 

       base.InitializeShell(); 
       Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose; 

      } 
      else 
      { 
       Application.Current.Shutdown(-1); 
      } 


#if SILVERLIGHT 
      Application.Current.RootVisual = (Shell)this.Shell;    
#else 
      Application.Current.MainWindow = (Shell)this.Shell; 


      Application.Current.MainWindow.Show(); 
#endif 
     } 

у меня трудное время оценки, если есть какие-либо ловушки или недостаток, кто есть комментарий

ответ

4

Да, у меня был точно такой же дилеммой. У вас есть только один RootVisual, но вы должны заставить пользователя войти в систему. Это распространенный сценарий, который на самом деле не затрагивается.

Вот что я сделал:

  1. код, как вы не должны Войти. Инициализировать оболочку и загрузить первый модуль. В моем случае первый модуль содержит элементы безопасности.

  2. Когда ваша «система» или что-то другое, что вы называете ее модулем, загрузите - напишите код в Initialize(), чтобы вызвать процедуру входа в систему, в моем случае это SecurityService.

  3. Я использовал RegionPopupManager (пример в проекте StockTrader RI в комплекте с PRISM), чтобы показать модальное всплывающее взаимодействие.

  4. При входе в систему - просто скрыть всплывающее окно и продолжить загрузку других модулей, заселение областей и т.д.

+1

Спасибо за бога комментариев. Поскольку я делаю настольное приложение, я буду придерживаться своего решения на данный момент, но я попробую, когда я получу время. благодаря – klashagelqvist