我在构造函数中定义了几个依赖注入的服务.在某些时候,我希望将服务作为新实例而不是已创建的同一实例.请注意,通常我希望共享服务,但在边缘情况下我想创建一个新实例,因此服务定义中的共享选项不适用.
我可以创建一个新对象,但是我必须手动注入依赖项,我宁愿让symfony来处理它.
那么如何告诉Symfony将服务作为新实例返回?
谢谢.
据我所知,没有办法告诉Symfony Dependency Injection Container有时返回共享实例,有时则返回服务的新实例.
默认情况下,服务是共享的,如您已经发现的那样.您可以通过在服务定义中设置设置来告知容器创建非共享服务:sharedfalse
# app/config/services.yml
services:
AppBundle\SomeNonSharedService:
shared: false
Run Code Online (Sandbox Code Playgroud)
有了这些知识,我认为您的问题的解决方案是使用不同的名称创建共享服务的副本,并将其标记为未共享,如上所述.当您要求容器获取副本时,它将每次创建一个新实例.
不要尝试将副本创建为原始服务的别名,它不起作用.实现的第一件事Contaner::get()是将作为参数提供的服务ID搜索到别名列表中,如果在那里找到它,则使用原始服务的ID.
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |