Symfony2依赖注入:性能影响

时间:2013-10-29 11:40:26

标签: performance symfony dependency-injection

我正在重构我的一个控制器以使其成为一项服务,我想知道是否存在性能影响而不将整个服务容器注入我的控制器。

这是否更有效:

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]

2 个答案:

答案 0 :(得分:4)

官方文档明确告诉不要将整个DIC注入控制器(感谢@NHG的链接)。

How to work with scopes节:

  

将整个容器注入服务通常不是一件好事   想法(只注入你需要的东西)。

但在Service container部分中:

  

当您从容器中请求my_mailer服务时,   容器构造对象并返回它。这是另一个主要问题   使用服务容器的优点。也就是说,服务永远不会   构造直到需要它为止。如果您定义服务但从不使用   它在请求时,永远不会创建服务。这节省了记忆和   提高您的申请速度。这也意味着有   用于定义大量服务的性能很小或没有。   永远不会使用从未使用过的服务。

因此,将整个DIC注入控制器不会对性能产生影响,因为只有控制器中使用的服务才会实现。

答案 1 :(得分:0)

使用控制器作为服务的想法只是注入necessery服务。标准控制器扩展Symfony\Bundle\FrameworkBundle\Controller\Controller,扩展Symfony\Component\DependencyInjection\ContainerAware。因此,注入整个容器是没有意义的......

通常,注入较少的服务比注入整个容器更有效。 此外,您应该熟悉base Symfony2 Controller class