10

在我的服务定义中,我想将对象而不是服务作为服务参数构造函数传递。

来自 config.yml:

services:
  acme.services.exampleservice:
    class:  Acme\ExampleBundle\Services\ExampleService
    arguments: 
        entityManager: "@doctrine.orm.entity_manager"
        httpClient: \Example\Http\Client\Client

注意httpClient论点。这必须是\Example\Http\Client\Client该类的一个实例。

以上不起作用 - 字符串“\Example\Http\Client\Client”作为httpClient参数传递给服务。

通过将实例传递\Example\Http\Client\Client给服务构造函数来实现上述目的的语法是什么?

4

1 回答 1

19

创建私人服务。这是文档中写的内容

如果您将私有服务用作多个其他服务的参数,这将导致使用两个不同的实例,因为私有服务的实例化是内联完成的(例如 new PrivateFooBar())。

services:
  acme.services.exampleservice:
    class:  Acme\ExampleBundle\Services\ExampleService
    arguments: 
        entityManager: "@doctrine.orm.entity_manager"
        httpClient: acme.services.httpClient

  acme.services.httpClient:
    class: Example\Http\Client\Client
    public: false

您将无法从容器中检索私有服务。从外部看,就好像您将常规对象传递给服务的构造函数一样。

于 2012-07-25T16:28:24.940 回答