Это было опубликовано на 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 - это обертка IResult для простого (WCF) вызова службы,Служба использует FaultContract / FaultException для сбоев.
В случае сбоя пользователь должен быть уведомлен, и FaultContract будет содержать некоторую полезную информацию о том, что пошло не так.В настоящее время результат Save перехватывает исключение и вставляет его в ResultCompletionEventArgs события Completed.Таким образом, SequentialResult, созданный конвейером, отменяется (из-за ошибки), в результате чего экран остается в занятом состоянии.
Что мне действительно нужно, так это идеи о наилучшем способе восстановления послеОшибка (удалить состояние занятости) и уведомить пользователя (у меня есть несколько реализаций IResult для различных стилей уведомления, которые я хотел бы использовать) о деталях, представленных в договоре об ошибках.Присоединяясь к событию Completed в моей виртуальной машине, я могу получить сообщение об ошибке, но на данный момент я больше не в контексте конвейера действий, поэтому любые IResults, которые я хотел бы использовать (MakeNotBusy и моя реализация уведомления уведомления), я долженвыполнить вручную (и я должен был бы создать свой собственный ActionExecutionContext, что я не хочу делать).
Я взглянул на спасательный фильтр Марко Амендолы для Caliburn.Micro с здесь, но, опять же, я не могу передать результаты из метода Rescue.
Я что-то упустил из виду?Как другие справляются с этой ситуацией?