/**
  * Freezes the container.
  *
  * This method does four things:
  *
  *  * The extension configurations are merged;
  *  * Parameter values are resolved;
  *  * The parameter bag is freezed;
  *  * Extension loading is disabled.
  */
 public function freeze()
 {
     $parameters = $this->parameterBag->all();
     $definitions = $this->definitions;
     $aliases = $this->aliases;
     foreach ($this->extensionConfigs as $name => $configs) {
         list($namespace, $tag) = explode(':', $name);
         $extension = $this->getExtension($namespace);
         $container = new self($this->parameterBag);
         $container->addObjectResource($extension);
         foreach ($configs as $config) {
             $extension->load($tag, $config, $container);
         }
         $this->merge($container);
     }
     $this->extensionConfigs = array();
     $this->addDefinitions($definitions);
     $this->addAliases($aliases);
     $this->parameterBag->add($parameters);
     parent::freeze();
 }
    /**
     * Freezes the container.
     *
     * This method does four things:
     *
     *  * The extension configurations are merged;
     *  * Parameter values are resolved;
     *  * The parameter bag is freezed;
     *  * Extension loading is disabled.
     */
    public function freeze()
    {
        $parameters = $this->parameterBag->all();
        $definitions = $this->definitions;
        $aliases = $this->aliases;

        foreach ($this->extensionConfigs as $name => $configs) {
            list($namespace, $tag) = explode(':', $name);

            $extension = $this->getExtension($namespace);

            $container = new self($this->parameterBag);
            $container->addObjectResource($extension);
            foreach ($configs as $config) {
                $extension->load($tag, $config, $container);
            }

            $this->merge($container);
        }

        $this->extensionConfigs = array();
        $this->addDefinitions($definitions);
        $this->addAliases($aliases);
        $this->parameterBag->add($parameters);

        foreach ($this->definitions as $definition) {
            foreach ($this->injectors as $injector) {
                if (null !== $definition->getFactoryService()) {
                    continue;
                }
                $defClass = $this->parameterBag->resolveValue($definition->getClass());
                $definition->setClass($defClass);
                if ($injector->supports($defClass)) {
                    $injector->processDefinition($definition);
                }
            }
        }

        parent::freeze();
    }