棱镜模块级异常处理

时间:2012-11-15 20:08:38

标签: c# exception mvvm exception-handling prism

我试图看看除了全局级别处理(Application.UnhandledException)之外是否可以在viewmodel级别处理异常。目前,如果其中一个视图模型抛出未捕获的错误,应用程序将很难崩溃。我想知道如何在模块级别捕获这个,发布一个事件,并将该模块从它占用的区域中删除,而不是删除整个应用程序。

有没有人实现过这样的东西?
是否应避免使用这种架构?

1 个答案:

答案 0 :(得分:2)

我在自己的工作中遇到了同样的问题。涵盖以下所有内容似乎对我们有用:

DispatcherUnhandledException += OnDispatcherUnhandledException;

TaskScheduler.UnobservedTaskException +=TaskScheduler_UnobservedTaskException; \\exceptions in tasks

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

另外,对于模块和& viewmodel级别异常,我们尝试/ catch然后通过EventAggregator发布一个事件。在我们的shell中,我们订阅此事件以显示/记录错误。由于shell很可能包含所有区域,因此您应该能够从视图中删除/隐藏这些模块。但我会说明模块不能卸载。这可能不是最佳解决方案,我们仍在探索更好的方法。

外壳:

EventAggregator.GetEvent<RaisedExceptionEvent>().Subscribe(RaisedException);

视图模型:

try
{
}
catch (Exception ex)
{
            EventAggregator.GetEvent<RaisedExceptionEvent>().Publish(new ExceptionManager(ex,
                                                                                          ExceptionMessageType.
                                                                                              Default, true));
}