public async Task RunWorkflowMiddlewareWithErrorHandling( WorkflowInstance workflow, WorkflowMiddlewarePhase phase, Type middlewareErrorType) { var middleware = _middleware.Where(m => m.Phase == phase); try { await RunWorkflowMiddleware(workflow, middleware); } catch (Exception exception) { var errorHandlerType = middlewareErrorType ?? typeof(IWorkflowMiddlewareErrorHandler); using (var scope = _serviceProvider.CreateScope()) { var typeInstance = scope.ServiceProvider.GetService(errorHandlerType); if (typeInstance is IWorkflowMiddlewareErrorHandler handler) { await handler.HandleAsync(workflow, exception); } } } }
private IWorkflowMiddleware BuildWorkflowMiddleware( WorkflowMiddlewarePhase phase, int id = 0 ) { var middleware = A.Fake <IWorkflowMiddleware>(); A.CallTo(() => middleware.Phase).Returns(phase); A .CallTo(HandleMethodFor(middleware)) .ReturnsLazily(async call => { Out.WriteLine($@"Before workflow middleware {id}"); await call.Arguments[1].As <WorkflowDelegate>().Invoke(); Out.WriteLine($@"After workflow middleware {id}"); }); return(middleware); }
public TestWorkflowMiddleware(WorkflowMiddlewarePhase phase) { Phase = phase; }