/**
  * On request received event, configure the router.
  * 
  * @param  DidReceiveRequest $event Event triggered when a request was received.
  */
 public function onRequest(DidReceiveRequest $event)
 {
     $request = $event->getRequest();
     $protocol = $request->getScheme();
     $host = $request->getHost();
     $port = $request->getPort();
     if (!empty($protocol)) {
         $this->router->setProtocol($protocol);
     }
     if (!empty($host)) {
         $this->router->setHost($host);
     }
     if (!empty($port)) {
         $this->router->setPort($port);
     }
 }
 /**
  * When the found controller method wants to have the request injected,
  * this method will do it.
  * 
  * @param  ControllerWillRespond $event Event triggered before execution of controller.
  */
 public function injectRequest(ControllerWillRespond $event)
 {
     $route = $this->router->getRoute($event->getControllerName());
     // find the method's meta data
     $methods = $route->getMethods();
     $i = ArrayUtils::search($methods, 'method', $event->getMethod());
     if ($i === false) {
         return;
     }
     $method = $methods[$i];
     $arguments = $event->getArguments();
     foreach ($method['params'] as $i => $param) {
         if ($param['class'] && Debugger::isExtending($param['class'], Request::class, true) && !$arguments[$i] instanceof Request) {
             $arguments[$i] = $this->request;
         }
     }
     $event->setArguments($arguments);
 }