Symfony2将实例化的对象传递给服务,而不是新对象


Symfony2 Passing instantiated Object to Service, rather than new object

我想把一个已经安装好的对象传递给我的服务构建者,而不是创建一个新的对象,来创建一个我这样做的:

services:
    ExampleService:
        class: Ex'ModelBundle'lib'Ex'ExSave
    LoginService:
        class: Snap'ModelBundle'Service'Login
        arguments: ["@doctrine.orm.entity_manager", "@ExampleService"]

我如何将已安装的ExampleService传递给登录服务

默认情况下,所有服务都有container作用域,根据文档的意思是:

每次从该容器请求时,都会使用相同的实例。

因此,您创建了ExampleService,但对该服务的任何其他后续请求都将返回其先前创建的实例。

归根结底,多个服务可以(并且将)使用ExampleService的共享实例。


或者,您可以使用Setter Injection

基本上,您不将@ExampleService传递给__construct,而是将其传递给单独的setter,后者将设置属性值(在服务中)。然后你照常使用你的服务。