public function run()
    {
        $event = new BeforeControllerRunEvent();

        $this->dispatcher->fire( Events::EVENT_BEFORE_CONTROLLER_RUN, $event );

        $action = $this->action->getName();

        if ( $this->action->hasParams() )
        {
            call_user_func_array( [
                                      $this,
                                      $action
                                  ],
                                  $this->action->getParams()
            );
        }
        else
        {
            $this->$action();
        }

        $event = new AfterControllerRunEvent();

        $this->dispatcher->fire( Events::EVENT_AFTER_CONTROLLER_RUN, $event );
    }