我正在使用C#和Caliburn。
是否存在一种全局方式来捕获所有视图模型中的异常?
当从DI/IoC容器导入时发生某种异常怎么办?
基本上,我希望在发生异常时显示一个消息框。
对我来说,RescueAttribute似乎必须放在每个单独的视图模型类上,并且当同时使用AsyncActionAttribute时它似乎不起作用。
方法IConventionManager.ApplyActionCreationConventions(IAction action, IMethod targetMethod)
在动作创建后立即调用,可以向其中添加过滤器。
您可以提供自定义的IConventionManager
,覆盖DefaultConventionManager.ApplyActionCreationConventions
并在动作中添加一个救援过滤器。
请注意,在这种情况下,您仍然需要在每个ViewModel上提供一个救援方法;为了克服这一问题,您可以构建一个新的自定义救援过滤器(按原始过滤器的方式)并将异常分派到您的基础架构中。
有一种非常简单的方法可以实现这一点,只需在您的引导程序中覆盖UnhandledException方法即可。
这里有一个例子:使用Caliburn.Micro在WPF应用程序中全局处理异常