Browse Source

This commit fixes two bugs:
- interfaces can now also be defined on containers which are built with an Extension
- interface injection can also be used on classes that require constructor arguments

Johannes Schmitt 14 years ago
parent
commit
e49cc36339

+ 1 - 0
src/Symfony/Component/DependencyInjection/ContainerBuilder.php

@@ -241,6 +241,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
 
         $this->addDefinitions($container->getDefinitions());
         $this->addAliases($container->getAliases());
+        $this->addInterfaceInjectors($container->getInterfaceInjectors());
         $this->parameterBag->add($container->getParameterBag()->all());
 
         foreach ($container->getResources() as $resource) {

+ 5 - 2
src/Symfony/Component/DependencyInjection/InterfaceInjector.php

@@ -79,8 +79,11 @@ class InterfaceInjector
     public function supports($object)
     {
         if (is_string($object)) {
-            $class = new \ReflectionClass($object);
-            $object = $class->newInstance();
+            $reflection = new \ReflectionClass($object);
+
+            return $reflection->implementsInterface($this->class)
+                   || $reflection->isSubClassOf($this->class)
+                   || $object === $this->class;
         }
 
         if ( ! is_object($object)) {