public function use($action)
{
if (!(is_callable($action) || $action instanceof Middleware || $action instanceof Bootable || $action instanceof Monitor)) {
throw new \InvalidArgumentException(__METHOD__ . " requires a callable action or Middleware instance");
}
if ($action instanceof self) {
/* merge routes in for better performance */
foreach ($action->routes as $route) {
$route[2] = array_merge($this->actions, $route[2]);
$this->routes[] = $route;
}
} else {
$this->actions[] = $action;
foreach ($this->routes as &$route) {
$route[2][] = $action;
}
}
return $this;
}