这也发布在Caliburn.Micro 讨论中。我真的在寻找有关最佳解决方法的建议和意见。
说我有以下动作
public IEnumerable<IResult> SaveStation()
{
yield return Busy.MakeBusy();
yield return new StationSave(_station);
yield return Busy.MakeNotBusy();
yield return Show.Tab<StationBrowseViewModel>();
}
StationSave 是围绕简单 (WCF) 服务调用的 IResult 包装器。该服务使用 FaultContract/FaultException 处理故障。
在出现故障的情况下,需要通知用户,并且 FaultContract 将包含一些关于出错原因的有用信息。目前,Save 结果捕获异常并将其插入到 Completed 事件的 ResultCompletionEventArgs 中。通过这样做,由管道创建的 SequentialResult 被取消(由于错误),从而使屏幕处于忙碌状态。
我真正想要的是关于从错误中恢复的最佳方法(删除忙碌状态)并通知用户(我有几个 IResult 实现,用于我想使用的不同样式的通知)细节的想法过错合同中规定。通过附加到我的 VM 中的 Completed 事件,我可以得到错误,但此时我不再处于 Action 管道的上下文中,所以我想使用的任何 IResults(MakeNotBusy 和我的显示通知实现)我必须手动执行(我必须新建我自己不想做的 ActionExecutionContext )。
我从这里查看了 Marco Amendola 的 Caliburn.Micro 救援过滤器,但我再次无法从 Rescue 方法传回 IResults。
我错过了什么明显的东西吗?其他人如何处理这种情况?