Mvvm 在Caliburn引导程序配置()中显示MessageBox

Mvvm 在Caliburn引导程序配置()中显示MessageBox,mvvm,caliburn.micro,Mvvm,Caliburn.micro,在我的Caliburn引导程序中,我试图验证用户是否具有运行我的应用程序的权限。如果他们没有,我需要给他们一条消息并退出。下面的代码在MessageBox.Show()调用上引发NullReferenceException。即使我将ComposeMef()调用移动到Configure()方法中的ValidateUserHasPermissionsToRun()之前,它仍然会出错 public class MyBootstrapper : Bootstrapper<DropWindowVie

在我的Caliburn引导程序中,我试图验证用户是否具有运行我的应用程序的权限。如果他们没有,我需要给他们一条消息并退出。下面的代码在MessageBox.Show()调用上引发NullReferenceException。即使我将
ComposeMef()
调用移动到
Configure()
方法中的
ValidateUserHasPermissionsToRun()
之前,它仍然会出错

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();
      }
   }
}
公共类MyBootstrapper:Bootstrapper
{
//为简洁起见,省略了不相关的方法
受保护的覆盖无效配置()
{
这个。初始化安全();
此.validateUserHasPermissionRun();
this.ComposeMef();
}
私有void ComposeMef()
{
AggregateCatalog catalog=newaggregateCatalog(AssemblySource.Instance.Select(x=>newassemblycatalog(x)).OfType());
this.container=新合成容器(目录);
CompositionBatch=新的CompositionBatch();
AddExportedValue(新的WindowManager());
AddExportedValue(新的EventAggregator());
batch.AddExportedValue(this.container);
batch.AddExportedValue(目录);
此.container.Compose(批处理);
}      
私有void validateUserHasPermissionRun()
{
User User=SecurityContext.Current.SecurityUser;
如果(!user.HasPrivilege(Constants.PrivilegeLoadData))
{
//抛出异常
MessageBox.Show(“您没有访问VIPER的权限。如果您需要帮助,请与服务台联系。”);
这个。TerminateApplication();
}
}
}

正确的处理方法是什么?对于这样简单的事情,我只想显示一个消息框。我真的不想开始编写一个全新的视图模型/视图。如果必须使用不同的ViewModel,如何切换Caliburn使用的ViewModel?或者我应该在
DropWindowViewModel
上设置一个属性来触发一个不同的界面吗?

我建议这是应该在根viewmodel中执行的操作。引导者应该就是这样。它加载应用程序所需的资源并进行配置。之后就完成了。检查用户是否可以运行应用程序是应用程序逻辑的一部分&因此应该进入根视图模型