Пример #1
0
        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);
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
 public CaughtException(T exception, ExceptionHandlingContext context)
 {
     _context  = context;
     Exception = exception;
 }