我应该从Symfony 2中的服务容器中删除未使用的服务吗?

时间:2013-01-04 15:31:40

标签: symfony dependency-injection symfony-2.1

我不知道这是否有一些好处:是否应该从服务容器中删除未使用的服务?

例如,在我的捆绑配置中,我可以禁用lang选项提供程序:

my_bundle:
    providers:
        lang:
            enabled: false

启用lang提供程序后,应添加provider标记。此服务在services.xml文件中定义,并通过扩展名加载:

<service id="my_bundle.provider.lang" class="My\Provider\LangOptionsProvider">

那么,删除这个定义以及为什么这是一个好主意?

public function load(array $configs, ContainerBuilder $container)
{
    // ...

    $loader->load('services.xml'); // Loads "my_bundle.provider.lang"

    if($config['providers']['lang']['enabled']) {
        // lang provider is enabled, add the tag
        $container->getDefinition('my_bundle.provider.lang')->addTag('provider');
    }
    else { // Is this really needed?
        // Remove lang provider definition (or just the tag?!)
        $container->removeDefinition('my_bundle.provider.lang');
    }
}

1 个答案:

答案 0 :(得分:4)

开销很小,因为在请求服务时会发生实例化,因此如果删除它并不重要。

  

当您从容器中请求my_mailer服务时,容器构造对象并返回它。这是使用服务容器的另一个主要优点。也就是说,在需要之前永远不会构建服务。如果您定义服务并且从不在请求中使用它,则永远不会创建该服务。这样可以节省内存并提高应用程序的速度。这也意味着定义大量服务的性能很差或没有。永远不会使用从未使用过的服务。

http://symfony.com/doc/current/book/service_container.html