public bool Dispatch(IInvocationContext invocationContext, Exception exception, IQualifier[] qualifierArray) { var qualifiers = new Qualifiers(qualifierArray); var context = new ExceptionHandlingContext(invocationContext, exception, qualifiers); DispatchCauses(exception, context, qualifiers); return(context.IsMarkedHandled == true); }
private void DispatchSpecificException <T>(T exception, ExceptionHandlingContext context, IQualifiers qualifiers) where T : Exception { var caught = new CaughtException <T>(exception, context); var handlers = _handlerResolver.Resolve(new ObserverResolvable(caught.GetType(), qualifiers)); foreach (var handler in handlers) { context.IsMarkedHandled = context.IsMarkedHandled ?? true; handler.Notify(caught); if (caught.IsMarkedHandled) { break; } } }
private void DispatchCauses(Exception exception, ExceptionHandlingContext context, IQualifiers qualifiers) { if (context.StopsHandling) { return; } if (exception.InnerException != null) { DispatchCauses(exception.InnerException, context, qualifiers); if (context.StopsHandling) { return; } } DispatchSpecificException((dynamic)exception, context, qualifiers); }
public CaughtException(T exception, ExceptionHandlingContext context) { _context = context; Exception = exception; }