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

时间:2013-12-13 21:16:18

标签: php symfony

我希望将已经实例化的对象传递给我的服务构造函数,而不是创建一个新对象,创建一个新对象,我这样做:

services:
    ExampleService:
        class: Ex\ModelBundle\lib\Ex\ExSave

    LoginService:
        class: Snap\ModelBundle\Service\Login
        arguments: ["@doctrine.orm.entity_manager", "@ExampleService"]

如何将已经实例化的ExampleService传递给LoginService

1 个答案:

答案 0 :(得分:0)

默认情况下,所有服务都有container范围,根据文档的含义:

  

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

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

这一切都归结为多个服务可以(并且将会)使用ExampleService的共享实例。


或者,您可以使用 Setter Injection

基本上,您不会将@ExampleService传递给__construct,而是将单独的setter设置为属性值(在服务中)。然后像往常一样使用您的服务。