Symfony ServiceContainer在编译后删除服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony ServiceContainer在编译后删除服务相关的知识,希望对你有一定的参考价值。

我在ServiceContainer的Symfony文档中读到,在从容器中删除编译容器之前未使用的任何服务。

现在,如果没有缓存容器,我会在请求上编译容器。

如何阻止未使用的服务被删除,特别是如果在编译容器后需要它们?

我知道Drupal通过基本上重写容器(主要是从原始Symfony容器中获取的代码)来做到这一点,但是虽然这是一个选项我想知道是否有更有效的方法来做到这一点?另外,我对Symfony比较新,所以任何相关的文档链接都会非常感激。

答案

默认情况下,所有未使用的private Symfony服务都被删除,因为它们是私有的,并且未定义为从外部调用它们。

如果private服务仅使用一次,它将被内联(并从容器中删除)。

但是public服务不会从容器中删除,即使你不使用它们,所以如果你想在DI容器中保留你的服务,请确保它是公开的

以上是关于Symfony ServiceContainer在编译后删除服务的主要内容,如果未能解决你的问题,请参考以下文章

laravel中的Contracts, ServiceContainer, ServiceProvider, Facades关系

typescript ServiceContainer.ts

接口注入与反转

我如何在没有 symfony 的项目中重用我的 symfony 实体

Symfony 4 捆绑包工作

Laravel 中服务容器的概念是啥?