4

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

例如,在我的包配置中,我可以禁用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');
    }
}
4

1 回答 1

4

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

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

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

于 2013-01-04T22:24:18.220 回答