Skip to content

Commit

Permalink
[DependencyInjection] Add hasInterfaceInjectorForClass(), which is he…
Browse files Browse the repository at this point in the history
…lpful for extension loader methods

Additionally, doc blocks were added for the Container's InterfaceInjector methods, and the test case was modified to cover both add() methods
  • Loading branch information
jmikola authored and fabpot committed Jan 7, 2011
1 parent 0c50ca8 commit 554c86c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 11 deletions.
49 changes: 42 additions & 7 deletions src/Symfony/Component/DependencyInjection/ContainerBuilder.php
Expand Up @@ -443,13 +443,11 @@ public function getAlias($id)
return $this->aliases[$id];
}

public function addInterfaceInjectors(array $injectors)
{
foreach ($injectors as $injector) {
$this->addInterfaceInjector($injector);
}
}

/**
* Adds an InterfaceInjector.
*
* @param InterfaceInjector $injector
*/
public function addInterfaceInjector(InterfaceInjector $injector)
{
$class = $injector->getClass();
Expand All @@ -460,6 +458,26 @@ public function addInterfaceInjector(InterfaceInjector $injector)
$this->injectors[$class] = $injector;
}

/**
* Adds multiple InterfaceInjectors.
*
* @param array $injectors An array of InterfaceInjectors
*/
public function addInterfaceInjectors(array $injectors)
{
foreach ($injectors as $injector) {
$this->addInterfaceInjector($injector);
}
}

/**
* Gets defined InterfaceInjectors. If a service is provided, only that
* support the service will be returned.
*
* @param string $service If provided, only injectors supporting this service will be returned
*
* @return array An array of InterfaceInjectors
*/
public function getInterfaceInjectors($service = null)
{
if (null === $service) {
Expand All @@ -471,6 +489,23 @@ public function getInterfaceInjectors($service = null)
});
}

/**
* Returns true if an InterfaceInjector is defined for the class.
*
* @param string $class The class
*
* @return boolean true if at least one InterfaceInjector is defined, false otherwise
*/
public function hasInterfaceInjectorForClass($class)
{
return array_key_exists($class, $this->injectors);
}

/**
* Sets the defined InterfaceInjectors.
*
* @param array $injectors An array of InterfaceInjectors indexed by class names
*/
public function setInterfaceInjectors(array $injectors)
{
$this->injectors = $injectors;
Expand Down
Expand Up @@ -409,20 +409,23 @@ public function testExtension()

/**
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::addInterfaceInjector
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::addInterfaceInjectors
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::getInterfaceInjectors
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::hasInterfaceInjectorForClass
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::setDefinition
*/
public function testInterfaceInjection()
{
$definition = new Definition('Symfony\Tests\Component\DependencyInjection\FooClass');

$injector = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 1);
$injector2 = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 0);
$injectors[] = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 1);
$injectors[] = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 0);

$container = new ContainerBuilder();
$container->addInterfaceInjector($injector);
$container->addInterfaceInjector($injector2);
$container->addInterfaceInjectors($injectors);
$this->assertEquals(1, count($container->getInterfaceInjectors('Symfony\Tests\Component\DependencyInjection\FooClass')));
$this->assertTrue($container->hasInterfaceInjectorForClass('Symfony\Tests\Component\DependencyInjection\FooClass'));
$this->assertFalse($container->hasInterfaceInjectorForClass('\Foo'));

$container->setDefinition('test', $definition);
$test = $container->get('test');
Expand Down

0 comments on commit 554c86c

Please sign in to comment.