public IHttpRoutable Dive(IHttpRouteCondition condition)
        {
            var routed = new HttpRouted(this);

            _pipeline.PushConditional(condition, routed, () => new HttpRouter());
            return(routed);
        }
 public void PushConditional(IHttpRouteCondition condition, IHttpRequestHandler handler, Func <HttpRouter> routerFactory)
 {
     if (_currentRouter == null)
     {
         _currentRouter = routerFactory();
         _handlers.Add(_currentRouter);
     }
     _currentRouter.When(condition, handler);
 }
 public void When(IHttpRouteCondition condition, IHttpRequestHandler handler)
 {
     _routes.Add(new HttpRoute(condition, handler));
 }
 public HttpRoute(IHttpRouteCondition condition, IHttpRequestHandler handler)
 {
     Condition = condition;
     Handler   = handler;
 }
 public IHttpRoutable UseWhen(IHttpRouteCondition condition, IHttpRequestHandler handler)
 {
     _pipeline.PushConditional(condition, handler, () => new HttpRouter());
     return(this);
 }