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