在Caliburn Bootstrapper中显示MessageBox配置()

时间:2012-08-09 14:08:48

标签: mvvm caliburn.micro

在我的Caliburn Bootstrapper中,我试图验证用户是否有权运行我的应用程序。如果他们不这样做,我需要向他们提供一条消息并退出。以下代码在MessageBox.Show()调用上抛出NullReferenceException。即使我在ComposeMef()方法中的ValidateUserHasPermissionsToRun()之前移动了Configure()来电,它仍然会出错。

public class MyBootstrapper : Bootstrapper<DropWindowViewModel>
{

   // irrelevant methods omitted for brevity

   protected override void Configure()
   {
      this.InitializeSecurity();
      this.ValidateUserHasPermissionToRun();
      this.ComposeMef();
   }

   private void ComposeMef()
   {
      AggregateCatalog catalog = new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>());

      this.container = new CompositionContainer(catalog);

      CompositionBatch batch = new CompositionBatch();

      batch.AddExportedValue<IWindowManager>(new WindowManager());
      batch.AddExportedValue<IEventAggregator>(new EventAggregator());
      batch.AddExportedValue(this.container);
      batch.AddExportedValue(catalog);

      this.container.Compose(batch);
   }      

   private void ValidateUserHasPermissionToRun()
   {
      User user = SecurityContext.Current.SecurityUser;

      if (!user.HasPrivilege(Constants.PrivilegeLoadData))
      {
         // throws an exception
         MessageBox.Show("You do not have access to VIPER. Please contact the help desk if you need help.");
         this.TerminateApplication();
      }
   }
}

处理此问题的正确方法是什么?对于这个简单的事情,我只想展示一个消息框。我真的不想编写一个全新的ViewModel / View。如果我必须使用不同的ViewModel,我将如何切换哪个ViewModel Caliburn使用?或者我应该在DropWindowViewModel上设置属性以触发不同的界面吗?

1 个答案:

答案 0 :(得分:3)

我建议这应该在你的根视图模型中完成。引导程序应该就是这样。它会加载您的应用所需的资源。配置他们。之后就完成了。检查用户是否可以运行应用程序是应用程序逻辑和放大器的一部分。因此应该进入根视图模型。