Bladeren bron

Merge remote branch 'everzet/builder-private-services-fix'

* everzet/builder-private-services-fix:
  [DependencyInjection] create inlined private service from it's definition
  [DependencyInjection] added failing private service user test-case
Fabien Potencier 14 jaren geleden
bovenliggende
commit
754a0771f3

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

@@ -742,8 +742,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
             foreach ($value as &$v) {
                 $v = $this->resolveServices($v);
             }
-        } else if (is_object($value) && $value instanceof Reference) {
+        } elseif (is_object($value) && $value instanceof Reference) {
             $value = $this->get((string) $value, $value->getInvalidBehavior());
+        } elseif (is_object($value) && $value instanceof Definition) {
+            $value = $this->createService($value, null);
         }
 
         return $value;

+ 17 - 0
tests/Symfony/Tests/Component/DependencyInjection/ContainerBuilderTest.php

@@ -470,6 +470,23 @@ class ContainerBuilderTest extends \PHPUnit_Framework_TestCase
         $container->compile();
     }
 
+    public function testPrivateServiceUser()
+    {
+        $fooDefinition     = new Definition('BarClass');
+        $fooUserDefinition = new Definition('BarUserClass', array(new Reference('bar')));
+        $container         = new ContainerBuilder();
+
+        $fooDefinition->setPublic(false);
+
+        $container->addDefinitions(array(
+            'bar'       => $fooDefinition,
+            'bar_user'  => $fooUserDefinition
+        ));
+
+        $container->compile();
+        $this->assertInstanceOf('BarClass', $container->get('bar_user')->bar);
+    }
+
     /**
      * @expectedException BadMethodCallException
      */

+ 10 - 0
tests/Symfony/Tests/Component/DependencyInjection/Fixtures/includes/classes.php

@@ -30,3 +30,13 @@ class BazClass
     {
     }
 }
+
+class BarUserClass
+{
+    public $bar;
+
+    public function __construct(BarClass $bar)
+    {
+        $this->bar = $bar;
+    }
+}