public PolicyBuilderTail <TSrc, TEnd> ThenComplete(Action <HandlerSpecifier <TCur, TEnd> > action)
        {
            var handlerSpecifier = new HandlerSpecifier <TCur, TEnd>();

            action(handlerSpecifier);

            this.handlers.Add(typeof(TCur), handlerSpecifier.HandlerType);
            return(new PolicyBuilderTail <TSrc, TEnd>(this.context, this.handlers));
        }
        public PolicyBuilderTail <TSrc, TEnd> StartAndComplete(Action <HandlerSpecifier <TSrc, TEnd> > action)
        {
            var handlers = new Dictionary <Type, Type>();

            var handlerSpecifier = new HandlerSpecifier <TSrc, TEnd>();

            action(handlerSpecifier);

            handlers.Add(typeof(TSrc), handlerSpecifier.HandlerType);

            return(new PolicyBuilderTail <TSrc, TEnd>(this.context, handlers));
        }
        Then <TTar>(Action <HandlerSpecifier <TCur, TTar> > action)

            where TTar : Exception
        {
            var handlerSpecifier = new HandlerSpecifier <TCur, TTar>();

            action(handlerSpecifier);

            this.handlers.Add(typeof(TCur), handlerSpecifier.HandlerType);

            return(new PolicyBuilderPart <TSrc, TTar, TEnd>(this.context, this.handlers));
        }
        //(Action<HandlerSpecifier<TCur, TEnd>> action)
        //{
        //    var handlerSpecifier = new HandlerSpecifier<TCur, TEnd>();
        //    action(handlerSpecifier);

        //    this.handlers.Add(typeof(TCur), handlerSpecifier.HandlerType);

        public PolicyBuilderPart <TSrc, TNxt, TEnd> Start <TNxt>(Action <HandlerSpecifier <TSrc, TNxt> > action)
            where TNxt : Exception
        {
            var handlers = new Dictionary <Type, Type>();

            var handlerSpecifier = new HandlerSpecifier <TSrc, TNxt>();

            action(handlerSpecifier);

            handlers.Add(typeof(TSrc), handlerSpecifier.HandlerType);

            return(new PolicyBuilderPart <TSrc, TNxt, TEnd>
                       (this.context, handlers));
        }