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

プライベートサービスを作成します。ドキュメントに書かれていることは次のとおりです。

プライベートサービスを複数の他のサービスへの引数として使用する場合、プライベートサービスのインスタンス化がインラインで行われるため、2つの異なるインスタンスが使用されます(例: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 に答える