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