我不知道这是否有一些好处:是否应该从服务容器中删除未使用的服务?
例如,在我的捆绑配置中,我可以禁用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');
}
}
答案 0 :(得分:4)
开销很小,因为在请求服务时会发生实例化,因此如果删除它并不重要。
当您从容器中请求my_mailer服务时,容器构造对象并返回它。这是使用服务容器的另一个主要优点。也就是说,在需要之前永远不会构建服务。如果您定义服务并且从不在请求中使用它,则永远不会创建该服务。这样可以节省内存并提高应用程序的速度。这也意味着定义大量服务的性能很差或没有。永远不会使用从未使用过的服务。