/** * @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) { $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; }
/** * 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; }