gpt4 book ai didi

mvvm - 在 Caliburn Bootstrapper Configure() 中显示 MessageBox

转载 作者:行者123 更新时间:2023-12-03 10:15:09 26 4
gpt4 key购买 nike

在我的 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,我将如何切换 Caliburn 使用的 ViewModel?或者我应该在 DropWindowViewModel 上设置一个属性吗?触发不同的界面?

最佳答案

我建议这是应该在你的 Root View 模型中完成的事情。 Bootstrap 应该就是这样。它加载您的应用程序所需的资源并配置它们。之后就完成了。检查用户是否可以运行应用程序是您的应用程序逻辑的一部分,因此应该进入 Root View 模型。

关于mvvm - 在 Caliburn Bootstrapper Configure() 中显示 MessageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11885310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com