2

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または、別のインターフェイスをトリガーするためににプロパティを設定する必要がありますか?

4

1 に答える 1

4

これは、ルートビューモデル内で実行する必要があることをお勧めします。ブートストラッパーはまさにそれでなければなりません。アプリに必要なリソースをロードして構成します。その後、それは行われます。ユーザーがアプリを実行できるかどうかを確認することは、アプリケーションロジックの一部であるため、ルートビューモデルで行う必要があります。

于 2012-08-22T09:28:10.673 に答える