/** * @covers ::addDependencyRetriever * * @dataProvider provideInstantiateWithSuggestedDependencies * * @param string $className * The fully qualified name of the class to instantiate. * @param array[] $suggestedDependencyIds * Keys are constructor argument names, and values are arrays of which * keys are dependency retriever names, and values are dependency IDs. */ public function testInstantiateWithSuggestedConstructorDependenciesAndSetterRetrieverInjection($className, array $suggestedDependencyIds = []) { $this->sut = new SimpleFactory($this->suggestedDependencyFinder->reveal()); $this->sut->addDependencyRetriever($this->goldenDependencyRetriever->reveal()); $this->sut->addDependencyRetriever($this->labradorDependencyRetriever->reveal()); $this->suggestedDependencyFinder->findSuggestedDependencyIds($className)->willReturn($suggestedDependencyIds); $overriddenDependencies = ['qux' => new \stdClass()]; $this->assertInstanceOf($className, $this->sut->instantiate($className, $overriddenDependencies)); }
/** * Adds another dependency retriever. * * The newly added retriever will receive a lower priority than any * existing retrievers. If a retriever with the same name already exists, * it is kept. * * @param \BartFeenstra\DependencyRetriever\Retriever\Retriever $dependencyRetriever */ public function addDependencyRetriever(Retriever $dependencyRetriever) { if (!array_key_exists($dependencyRetriever->getName(), $this->dependencyRetrievers)) { $this->dependencyRetrievers[$dependencyRetriever->getName()] = $dependencyRetriever; } }