浏览代码

made DIC extensions members of the Container instead of static members

Fabien Potencier 14 年之前
父节点
当前提交
a29a413c48

+ 0 - 5
src/Symfony/Bundle/DoctrineBundle/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php

@@ -24,11 +24,6 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
 {
     abstract protected function loadFromFile(ContainerBuilder $container, $file);
 
-    public function setUp()
-    {
-        ContainerBuilder::clearExtensions();
-    }
-
     public function testDbalOverrideDefaultConnection()
     {
         $container = $this->getContainer();

+ 0 - 5
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php

@@ -21,11 +21,6 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
 {
     abstract protected function loadFromFile(ContainerBuilder $container, $file);
 
-    public function setUp()
-    {
-        ContainerBuilder::clearExtensions();
-    }
-
     public function testDependencyInjectionConfigurationDefaults()
     {
         $container = $this->getContainer();

+ 0 - 1
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

@@ -187,7 +187,6 @@ abstract class FrameworkExtensionTest extends TestCase
 
     protected function createContainerFromFile($file)
     {
-        ContainerBuilder::clearExtensions();
         $container = $this->createContainer();
         $container->registerExtension(new FrameworkExtension());
         $this->loadFromFile($container, $file);

+ 0 - 1
src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php

@@ -144,7 +144,6 @@ abstract class SecurityExtensionTest extends \PHPUnit_Framework_TestCase
 
     protected function getContainer($file)
     {
-        ContainerBuilder::clearExtensions();
         $container = new ContainerBuilder();
         $security = new SecurityExtension();
         $container->registerExtension($security);

+ 15 - 25
src/Symfony/Component/DependencyInjection/ContainerBuilder.php

@@ -27,8 +27,8 @@ use Symfony\Component\Config\Resource\ResourceInterface;
  */
 class ContainerBuilder extends Container implements TaggedContainerInterface
 {
-    static protected $extensions     = array();
-    static protected $extensionsByNs = array();
+    protected $extensions     = array();
+    protected $extensionsByNs = array();
 
     protected $definitions      = array();
     protected $aliases          = array();
@@ -53,12 +53,12 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      *
      * @param ExtensionInterface $extension An extension instance
      */
-    static public function registerExtension(ExtensionInterface $extension)
+    public function registerExtension(ExtensionInterface $extension)
     {
-        static::$extensions[$extension->getAlias()] = $extension;
+        $this->extensions[$extension->getAlias()] = $extension;
 
         if (false !== $extension->getNamespace()) {
-            static::$extensionsByNs[$extension->getNamespace()] = $extension;
+            $this->extensionsByNs[$extension->getNamespace()] = $extension;
         }
     }
 
@@ -69,14 +69,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      *
      * @return ExtensionInterface An extension instance
      */
-    static public function getExtension($name)
+    public function getExtension($name)
     {
-        if (isset(static::$extensions[$name])) {
-            return static::$extensions[$name];
+        if (isset($this->extensions[$name])) {
+            return $this->extensions[$name];
         }
 
-        if (isset(static::$extensionsByNs[$name])) {
-            return static::$extensionsByNs[$name];
+        if (isset($this->extensionsByNs[$name])) {
+            return $this->extensionsByNs[$name];
         }
 
         throw new \LogicException(sprintf('Container extension "%s" is not registered', $name));
@@ -87,9 +87,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      *
      * @return array An array of ExtensionInterface
      */
-    static public function getExtensions()
+    public function getExtensions()
     {
-        return static::$extensions;
+        return $this->extensions;
     }
 
     /**
@@ -98,19 +98,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      * @param string $name The name of the extension
      * @return boolean If the extension exists
      */
-    static public function hasExtension($name)
+    public function hasExtension($name)
     {
-        return isset(static::$extensions[$name]) || isset(static::$extensionsByNs[$name]);
-    }
-
-    /**
-     * Unregisters all extensions.
-     *
-     * This method is only useful in unit tests.
-     */
-    static public function clearExtensions()
-    {
-        static::$extensions = array();
+        return isset($this->extensions[$name]) || isset($this->extensionsByNs[$name]);
     }
 
     /**
@@ -370,7 +360,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
             $this->addResource($resource);
         }
 
-        foreach (static::$extensions as $name => $extension) {
+        foreach ($this->extensions as $name => $extension) {
             if (!isset($this->extensionConfigs[$name])) {
                 $this->extensionConfigs[$name] = array();
             }

+ 0 - 2
tests/Symfony/Tests/Component/DependencyInjection/Dumper/PhpDumperTest.php

@@ -128,8 +128,6 @@ class PhpDumperTest extends \PHPUnit_Framework_TestCase
 
         $dumper = new PhpDumper($container);
 
-        file_put_contents(self::$fixturesPath.'/php/services_interfaces-1-1.php', $dumper->dump());
-
         $this->assertStringEqualsFile(self::$fixturesPath.'/php/services_interfaces-1-1.php', $dumper->dump(), '->dump() dumps interface injectors');
     }
 }

+ 0 - 36
tests/Symfony/Tests/Component/DependencyInjection/Fixtures/php/services_interfaces-1-1.php

@@ -48,40 +48,6 @@ class ProjectServiceContainer extends Container
         return $instance;
     }
 
-    /**
-     * Gets the 'project.service.bar' service.
-     *
-     * This service is shared.
-     * This method always returns the same instance of the service.
-     *
-     * @return FooClass A FooClass instance.
-     */
-    protected function getProject_Service_BarService()
-    {
-        $this->services['project.service.bar'] = $instance = new \FooClass();
-
-        $instance->setBar('someValue');
-
-        return $instance;
-    }
-
-    /**
-     * Gets the 'project.service.foo' service.
-     *
-     * This service is shared.
-     * This method always returns the same instance of the service.
-     *
-     * @return FooClass A FooClass instance.
-     */
-    protected function getProject_Service_FooService()
-    {
-        $this->services['project.service.foo'] = $instance = new \FooClass();
-
-        $instance->setBar('someValue');
-
-        return $instance;
-    }
-
     /**
      * {@inheritdoc}
      */
@@ -121,8 +87,6 @@ class ProjectServiceContainer extends Container
         return array(
             'cla' => 'Fo',
             'ss' => 'Class',
-            'project.parameter.bar' => 'foobar',
-            'project.parameter.foo' => 'foobar',
         );
     }
 }

+ 4 - 1
tests/Symfony/Tests/Component/DependencyInjection/Loader/XmlFileLoaderTest.php

@@ -225,7 +225,10 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('BAR', $services['project.service.foo']->getClass(), '->load() parses extension elements');
         $this->assertEquals('BAR', $parameters['project.parameter.foo'], '->load() parses extension elements');
 
-        $loader = new ProjectLoader2(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/xml'));
+        $container = new ContainerBuilder();
+        $container->registerExtension(new \ProjectExtension());
+        $container->registerExtension(new \ProjectWithXsdExtension());
+        $loader = new ProjectLoader2($container, new FileLocator(self::$fixturesPath.'/xml'));
 
         // extension with an XSD (does not validate)
         try {