src/DependencyEngine/DependenciesEngine.php
protected function loadDependency($name, $dependencyDefinition, &$loadedDependencies = array()){
        $newInstance= NULL;
        //Si es singleton analiza si existe y si puede devuelve la msima
        if(isset($this->singletons[$name])){
            $newInstance= $this->singletons[$name];
        }else{            
            //Veo si tiene namespace y si tiene le agrego el mismo
            $namespace= (isset($dependencyDefinition['namespace']) ? $dependencyDefinition['namespace'] : ''); 
            $dir= explode("/", $dependencyDefinition['class']);
            $class= $dir[count($dir) - 1];
            if($namespace != ''){ $class= "\\" . $namespace . "\\" . $class;}
            
            $newInstance= NULL;
            if(isset($dependencyDefinition['factory-method'])){
                $factoryMethod= $dependencyDefinition['factory-method'];
                if(isset($dependencyDefinition['factory-bean'])){
                    $factoryBean= $this->getDependency($dependencyDefinition['factory-bean'], $loadedDependencies);
                    $newInstance= $factoryBean->$factoryMethod();
                }else{
                    $newInstance= $class::$factoryMethod();
                }
            }else{
                //Consigo los parametros del constructor
                $params= array();
                if(isset($dependencyDefinition['construct'])){
                    //Parseo los parametros correctamente
                    $params= $this->parseProperties($dependencyDefinition['construct']);
                }
                //Creo una instancia con el constructor correspondiente en base a los parametros
                $reflection= new \ReflectionClass($class);
                $newInstance= $reflection->newInstanceArgs($params);
                //La agrego a loadedDependencies para dependencias circulares
                $loadedDependencies[$name]= $newInstance;
            }
            
            //Si es un singleton la guardo como tal
            if(isset($dependencyDefinition['singleton']) && ($dependencyDefinition['singleton'] == "TRUE" || $dependencyDefinition['singleton'] == "true")){
                $this->singletons[$name]= $newInstance;
            }

            //Injecto las dependencias a las propiedades
            //Primero veo si hay Referencia a otras dependencias y cargo las mismas y luego guardo las propiedades
            if(isset($dependencyDefinition['properties'])){
                $properties= $this->parseProperties($dependencyDefinition['properties'], $loadedDependencies);
                $reflection= new Reflection($newInstance);
                $reflection->setProperties($properties, TRUE);
            }                       
        }        
        return $newInstance;
    }
protected function loadDependency($name, $dependencyDefinition, &$loadedDependencies = array()){
        $newInstance= NULL;
        //Si es singleton analiza si existe y si puede devuelve la msima
        if(isset($this->singletons[$name])){
            $newInstance= $this->singletons[$name];
        }else{            
            //Veo si tiene namespace y si tiene le agrego el mismo
            $namespace= (isset($dependencyDefinition['namespace']) ? $dependencyDefinition['namespace'] : ''); 
            $dir= explode("/", $dependencyDefinition['class']);
            $class= $dir[count($dir) - 1];
            if($namespace != ''){ $class= "\\" . $namespace . "\\" . $class;}
            
            $newInstance= NULL;
            if(isset($dependencyDefinition['factory-method'])){
                $factoryMethod= $dependencyDefinition['factory-method'];
                if(isset($dependencyDefinition['factory-bean'])){
                    $factoryBean= $this->getDependency($dependencyDefinition['factory-bean'], $loadedDependencies);
                    $newInstance= $factoryBean->$factoryMethod();
                }else{
                    $newInstance= $class::$factoryMethod();
                }
            }else{
                //Consigo los parametros del constructor
                $params= array();
                if(isset($dependencyDefinition['construct'])){
                    //Parseo los parametros correctamente
                    $params= $this->parseProperties($dependencyDefinition['construct']);
                }
                //Creo una instancia con el constructor correspondiente en base a los parametros
                $reflection= new \ReflectionClass($class);
                $newInstance= $reflection->newInstanceArgs($params);
                //La agrego a loadedDependencies para dependencias circulares
                $loadedDependencies[$name]= $newInstance;
            }
            
            //Si es un singleton la guardo como tal
            if(isset($dependencyDefinition['singleton']) && ($dependencyDefinition['singleton'] == "TRUE" || $dependencyDefinition['singleton'] == "true")){
                $this->singletons[$name]= $newInstance;
            }

            //Injecto las dependencias a las propiedades
            //Primero veo si hay Referencia a otras dependencias y cargo las mismas y luego guardo las propiedades
            if(isset($dependencyDefinition['properties'])){
                $properties= $this->parseProperties($dependencyDefinition['properties'], $loadedDependencies);
                $reflection= new Reflection($newInstance);
                $reflection->setProperties($properties, TRUE);
            }                       
        }        
        return $newInstance;
    }
protected function loadDependency ( $ name , $ dependencyDefinition , & $ loadedDependencies = array ( ) ) { $ newInstance = NULL ; //Si es singleton analiza si existe y si puede devuelve la msima if ( isset ( $ this -> singletons [ $ name ] ) ) { $ newInstance = $ this -> singletons [ $ name ] ; } else { //Veo si tiene namespace y si tiene le agrego el mismo $ namespace = ( isset ( $ dependencyDefinition [ 'namespace' ] ) ? $ dependencyDefinition [ 'namespace' ] : '' ) ; $ dir = explode ( "/" , $ dependencyDefinition [ 'class' ] ) ; $ class = $ dir [ count ( $ dir ) - 1 ] ; if ( $ namespace != '' ) { $ class = "\\" . $ namespace . "\\" . $ class ; } $ newInstance = NULL ; if ( isset ( $ dependencyDefinition [ 'factory-method' ] ) ) { $ factoryMethod = $ dependencyDefinition [ 'factory-method' ] ; if ( isset ( $ dependencyDefinition [ 'factory-bean' ] ) ) { $ factoryBean = $ this -> getDependency ( $ dependencyDefinition [ 'factory-bean' ] , $ loadedDependencies ) ; $ newInstance = $ factoryBean -> $ factoryMethod ( ) ; } else { $ newInstance = $ class :: $ factoryMethod ( ) ; } } else { //Consigo los parametros del constructor $ params = array ( ) ; if ( isset ( $ dependencyDefinition [ 'construct' ] ) ) { //Parseo los parametros correctamente $ params = $ this -> parseProperties ( $ dependencyDefinition [ 'construct' ] ) ; } //Creo una instancia con el constructor correspondiente en base a los parametros $ reflection = new \ ReflectionClass ( $ class ) ; $ newInstance = $ reflection -> newInstanceArgs ( $ params ) ; //La agrego a loadedDependencies para dependencias circulares $ loadedDependencies [ $ name ] = $ newInstance ; } //Si es un singleton la guardo como tal if ( isset ( $ dependencyDefinition [ 'singleton' ] ) && ( $ dependencyDefinition [ 'singleton' ] == "TRUE" || $ dependencyDefinition [ 'singleton' ] == "true" ) ) { $ this -> singletons [ $ name ] = $ newInstance ; } //Injecto las dependencias a las propiedades //Primero veo si hay Referencia a otras dependencias y cargo las mismas y luego guardo las propiedades if ( isset ( $ dependencyDefinition [ 'properties' ] ) ) { $ properties = $ this -> parseProperties ( $ dependencyDefinition [ 'properties' ] , $ loadedDependencies ) ; $ reflection = new Reflection ( $ newInstance ) ; $ reflection -> setProperties ( $ properties , TRUE ) ; } } return $ newInstance ; }
Realiza la carga de una dependencia que luego va a ser inyectada
@param string $name
@param array $dependencyDefinition
@param array &$loadedDependencies
@return type
Realiza la carga de una dependencia que luego va a ser inyectada