/** {@inheritdoc} */
 public function resolve(DependencyDefinition $dependencyDefinition)
 {
     $dependency = $dependencyDefinition->getDependency();
     if (!is_object($dependency)) {
         throw new InvalidDependencyResolverResultTypeException($dependency);
     }
     $this->injectDependencies($dependency, $dependencyDefinition);
     return $dependency;
 }
 /**
  * @covers Brickoo\Component\IoC\Definition\DependencyDefinition::getScope
  * @covers Brickoo\Component\IoC\Definition\DependencyDefinition::getArgumentsContainer
  * @covers Brickoo\Component\IoC\Definition\DependencyDefinition::getInjectionsContainer
  */
 public function testDefinitionGetterMethods()
 {
     $scope = DependencyDefinition::SCOPE_SINGLETON;
     $argumentContainer = $this->getMock("\\Brickoo\\Component\\IoC\\Definition\\Container\\ArgumentDefinitionContainer");
     $injectionContainer = $this->getMock("\\Brickoo\\Component\\IoC\\Definition\\Container\\InjectionDefinitionContainer");
     $annotationDefinition = new DependencyDefinition("@MyDependency", $scope, $argumentContainer, $injectionContainer);
     $this->assertEquals($scope, $annotationDefinition->getScope());
     $this->assertSame($argumentContainer, $annotationDefinition->getArgumentsContainer());
     $this->assertSame($injectionContainer, $annotationDefinition->getInjectionsContainer());
 }
 /** {@inheritdoc} */
 public function resolve(DependencyDefinition $dependencyDefinition)
 {
     $dependencyClosure = $dependencyDefinition->getDependency();
     if (!$dependencyClosure instanceof \Closure) {
         throw new InvalidDependencyTypeException($dependencyClosure);
     }
     $dependency = call_user_func_array($dependencyClosure, [$this->getDIContainer(), $this->collectArguments($dependencyDefinition->getArgumentsContainer())]);
     if (!is_object($dependency)) {
         throw new InvalidDependencyResolverResultTypeException($dependency);
     }
     $this->injectDependencies($dependency, $dependencyDefinition);
     return $dependency;
 }
 /** {@inheritdoc} */
 public function resolve(DependencyDefinition $dependencyDefinition)
 {
     $dependencyCallable = $dependencyDefinition->getDependency();
     if (!is_callable($dependencyCallable)) {
         throw new InvalidDependencyTypeException($dependencyCallable);
     }
     $dependency = call_user_func($dependencyCallable, $this->getDIContainer());
     if (!is_object($dependency)) {
         throw new InvalidDependencyResolverResultTypeException($dependency);
     }
     $this->injectDependencies($dependency, $dependencyDefinition);
     return $dependency;
 }
 /** {@inheritdoc} */
 public function resolve(DependencyDefinition $dependencyDefinition)
 {
     $dependencyClassName = (string) $dependencyDefinition->getDependency();
     if (!class_exists($dependencyClassName)) {
         throw new DependencyClassUnknownException($dependencyClassName);
     }
     $injectionsContainer = $dependencyDefinition->getInjectionsContainer();
     $reflectionClass = new \ReflectionClass($dependencyClassName);
     if ($injectionDefinition = $injectionsContainer->getByTarget(InjectionDefinition::TARGET_CONSTRUCTOR)) {
         $arguments = $this->collectArguments($injectionDefinition[0]->getArgumentsContainer());
         $dependency = $reflectionClass->newInstanceArgs($arguments);
     } else {
         $dependency = $reflectionClass->newInstance();
     }
     $this->injectDependencies($dependency, $dependencyDefinition);
     return $dependency;
 }
Example #6
0
 /**
  * Check if the definition targets singleton scope.
  * @param \Brickoo\Component\IoC\Definition\DependencyDefinition $definition
  * @return boolean
  */
 private function hasSingletonScope(DependencyDefinition $definition)
 {
     return $definition->getScope() == DependencyDefinition::SCOPE_SINGLETON;
 }
 /** {@inheritdoc} */
 public function resolve(DependencyDefinition $dependencyDefinition)
 {
     $dependency = new Dependency();
     $dependency->arguments = $this->collectArguments($dependencyDefinition->getArgumentsContainer());
     $this->injectDependencies($dependency, $dependencyDefinition);
     return $dependency;
 }
 /**
  * Resolves a dependency definition.
  * @param \Brickoo\Component\IoC\DIContainer $container
  * @param \Brickoo\Component\IoC\Definition\DependencyDefinition
  * @throws \Brickoo\Component\IoC\Resolver\Exception\DefinitionTypeUnknownException
  * @return mixed the resolved definition result
  */
 public function resolve(DIContainer $container, DependencyDefinition $dependencyDefinition)
 {
     $dependency = $dependencyDefinition->getDependency();
     return $this->getResolver($this->getResolverType($dependency), $container)->resolve($dependencyDefinition);
 }
 /**
  * Injects the target object dependencies.
  * @param object $targetObject
  * @param \Brickoo\Component\IoC\Definition\DependencyDefinition $dependencyDefinition
  * @return \Brickoo\Component\IoC\Resolver\DependencyResolver
  */
 protected function injectDependencies($targetObject, DependencyDefinition $dependencyDefinition)
 {
     $injectionsContainer = $dependencyDefinition->getInjectionsContainer();
     if ($injectionsContainer->isEmpty()) {
         return $targetObject;
     }
     if ($injectionDefinitions = $injectionsContainer->getByTarget(InjectionDefinition::TARGET_METHOD)) {
         $this->injectDependenciesToMethods($targetObject, $injectionDefinitions);
     }
     if ($injectionDefinitions = $injectionsContainer->getByTarget(InjectionDefinition::TARGET_PROPERTY)) {
         $this->injectDependenciesToProperties($targetObject, $injectionDefinitions);
     }
     return $this;
 }