/**
  * Static method that dispatches a controller based on the provided controller and action name
  *
  * @param string             $controller the name of the controller without the trailing word Controller, e.g. Index as opposed to IndexController
  * @param string             $action the name of the action without the trailing word Action, e.g. index as opposed to indexAction
  * @return object
  */
 public static function dispatch($controller = "Index", $action = "index")
 {
     try {
         $controllerName = $controller . "Controller";
         $controllerLocation = FrontController::retrieveControllerFileLocation($controllerName);
         if (!file_exists($controllerLocation)) {
             throw new Exception($controllerName . ".class.php does not exist");
         }
         include $controllerLocation;
         eval("\$object = new " . $controllerName . "();");
         $object->__set("action", $action);
         $object->__set("controller", $controller);
         $object->__set("controllerName", $controllerName);
         $object->__set("url", FrontController::retrieveURL());
         $object->__set("method", FrontController::retrieveMethod());
         $object->__set("model", FrontController::retrieveModel($controller));
         $object->__set("view", new View($controller, $action));
         if (method_exists($object, "initialize")) {
             $annotationFactory = new AnnotationFactory($controllerLocation, "initialize");
             $object->initialize();
         }
         return $object;
     } catch (Exception $e) {
         Functions::dump($e->getMessage());
         return NULL;
     }
 }