/**
  * @param $controllerStr
  * @param null $actionStr
  * @param array $additionalParams
  * @return mixed|null|ControllerInterface
  */
 public function getController($controllerStr, $actionStr = null, $additionalParams = array())
 {
     $controller = null;
     if (!empty($this->controllers[$controllerStr])) {
         /* @var $controller ControllerInterface */
         $controller = $this->controllers[$controllerStr];
     } else {
         if (!$this->configIsEmpty('namespace')) {
             ControllerFactory::setConfig('namespace', $this->config('namespace'));
         }
         $controller = ControllerFactory::create($this, $controllerStr, $actionStr, $additionalParams);
         $this->controllers[$controllerStr] = $controller;
     }
     if (!empty($controller)) {
         $controller->resetParams();
         if (!empty($additionalParams)) {
             $controller->setParams($additionalParams);
         }
         if (!is_null($actionStr)) {
             $controller->setCurrentAction($actionStr);
         }
     }
     return $controller;
 }