public Exception Handle(IExceptionalResolver resolver, Exception src)
        {
            var cur = src;

            foreach (var handlerDesc in this.handlerDefinitions)
            {
                var handler = resolver.Resolve(handlerDesc.Value) as IExceptionHandler;

                cur = handler?.Handle(cur);
                if (cur == null)
                {
                    throw new ExceptionManagerConfigurationException();
                }
            }

            return(this.terminatorType == null
                       ? cur // No terminatorType was defined, the exception will be returned for re-throwing.
                       : Terminate(resolver, cur as TEnd));
        }
        private Exception Terminate(IExceptionalResolver resolver, TEnd cur)
        {
            ((TerminatorBase <TEnd>)resolver.Resolve(this.terminatorType)).Terminate(cur);

            return(null);
        }