/**
  * Get The Object (string, int, boolean or Object) of the dependency
  *
  * @param array $dependency the dependency description
  * @param string $contextReferenceId the context reference ID
  *
  * @return object the object to inject in the bean
  */
 private static function resolveTypeOfDependency($dependency, $contextReferenceId)
 {
     self::$logger->debug('Get Dependency type ' . $dependency['name']);
     $objectToInject = null;
     if (isset($dependency['ref'])) {
         //If the dependency is a object, I get this object from the container
         $objectToInject = SingletonCoreContainer::getInstance($contextReferenceId)->getBean($dependency['ref']);
     } else {
         //If not "object", check if is "array"
         $dependency = self::isArrayDependency($dependency);
         switch ($dependency['type']) {
             case ArgsValue::STRING:
                 $objectToInject = (string) $dependency['value'];
                 break;
             case ArgsValue::INT:
                 $objectToInject = (int) $dependency['value'];
                 break;
             case ArgsValue::BOOLEAN:
                 $objectToInject = (bool) $dependency['value'];
                 break;
             case ArgsValue::ARRAYLIST:
                 $objectToInject = (array) $dependency['value'];
                 break;
         }
     }
     return $objectToInject;
 }
 /**
  * Get Bean construct values
  *
  * @param array $args bean's constructors args
  *
  * @return array array with the dependencies of the bean
  */
 private function argsControl($args, $contextReferenceId)
 {
     $this->logger->debug('Get Args value');
     $constructArgs = array();
     foreach ($args as $arg) {
         $arg = $this->isDependencyArray($arg);
         switch ($arg['type']) {
             case ArgsValue::BEAN:
                 $constructArgs[] = SingletonCoreContainer::getInstance($contextReferenceId)->getBean($arg['ref']);
                 break;
             case ArgsValue::INT:
                 $constructArgs[] = (int) $arg['name'];
                 break;
             case ArgsValue::STRING:
                 $constructArgs[] = (string) $arg['name'];
                 break;
             case ArgsValue::BOOLEAN:
                 $constructArgs[] = (bool) $arg['name'];
                 break;
             case ArgsValue::ARRAYLIST:
                 $constructArgs[] = (array) $arg['valueOf'];
                 break;
             default:
                 $constructArgs[] = $arg['name'];
                 break;
         }
     }
     return $constructArgs;
 }
 /**
  * Get the ContextReader and set up this into the Container
  *
  * @param Configuration $configuration the Configuration implementation
  * @param string $contextReferenceId the context application reference id
  *
  * @return void
  */
 private function init(Configuration $configuration, $contextReferenceId)
 {
     $this->logger->debug('Create configuration ' . get_class($configuration));
     $contextReader = $configuration->getContextReader();
     $this->coreContainer = SingletonCoreContainer::getInstance($contextReferenceId);
     $this->isApplicationLoaded($contextReader, $contextReferenceId);
     if ($configuration->isLoadedForTheFirstTime() and PropertiesLoader::getProperty(self::LAZY_INIT) == 'false') {
         $this->initBeans($contextReader);
     }
 }