3

コントローラーの 1 つをサービスにリファクタリングしています。サービス コンテナー全体をコントローラーに挿入しないとパフォーマンスに影響があるかどうかを知りたいです。

これはより効率的ですか:

innova.path.controller:
    class: %innova.controller.path.class%
    arguments:
       entityManager:   @doctrine.orm.entity_manager
       session:         @session
       securityContext: @security.context
       router:          @router
       translator:      @translator
       pathManager:     @innova.manager.path_manager
    calls:
       - [setRequest, ["@?request="]]
    scope: request

これより、例えば?

innova.path.controller:
    class: %innova.controller.path.class%
    arguments: [@service_container]
4

2 に答える 2

4

公式ドキュメントは、DIC全体をコントローラーに挿入しないように明示的に指示しています(リンクの@NHGに感謝します)。

セクションスコープの使用方法:

コンテナー全体をサービスに注入することは、通常はお勧めできません (必要なものだけを注入します)。

しかし、セクションService containerでは:

コンテナーから my_mailer サービスを要求すると、コンテナーはオブジェクトを構築して返します。これは、サービス コンテナーを使用するもう 1 つの大きな利点です。つまり、サービスは必要になるまで構築されません。サービスを定義してリクエストで使用しない場合、サービスは作成されません。これにより、メモリが節約され、アプリケーションの速度が向上します。これはまた、多数のサービスを定義しても、パフォーマンスへの影響がほとんどまたはまったくないことを意味します。使用されないサービスは構築されません。

そのため、コントローラーで使用されるサービスのみがインスタンス化されるため、コントローラーに DIC 全体を挿入してもパフォーマンスに影響はありません。

于 2013-10-29T14:25:16.167 に答える
0

コントローラーをサービスとして使用するという考え方は、必要なサービスのみを注入することです。標準コントローラーはSymfony\Bundle\FrameworkBundle\Controller\Controller、どの拡張を拡張しSymfony\Component\DependencyInjection\ContainerAwareます。したがって、コンテナ全体を注入しても意味がありません...

一般に、コンテナ全体を注入するよりも少ないサービスを注入する方が効率的です。さらに、基本的な Symfony2 Controller クラスに慣れる必要があります。

于 2013-10-29T11:58:25.223 に答える