我正在重构我的一个控制器以使其成为一项服务,我想知道是否存在性能影响而不将整个服务容器注入我的控制器。
这是否更有效:
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]
答案 0 :(得分:4)
官方文档明确告诉不要将整个DIC注入控制器(感谢@NHG的链接)。
将整个容器注入服务通常不是一件好事 想法(只注入你需要的东西)。
但在Service container部分中:
当您从容器中请求my_mailer服务时, 容器构造对象并返回它。这是另一个主要问题 使用服务容器的优点。也就是说,服务永远不会 构造直到需要它为止。如果您定义服务但从不使用 它在请求时,永远不会创建服务。这节省了记忆和 提高您的申请速度。这也意味着有 用于定义大量服务的性能很小或没有。 永远不会使用从未使用过的服务。
因此,将整个DIC注入控制器不会对性能产生影响,因为只有控制器中使用的服务才会实现。
答案 1 :(得分:0)
使用控制器作为服务的想法只是注入necessery服务。标准控制器扩展Symfony\Bundle\FrameworkBundle\Controller\Controller
,扩展Symfony\Component\DependencyInjection\ContainerAware
。因此,注入整个容器是没有意义的......
通常,注入较少的服务比注入整个容器更有效。 此外,您应该熟悉base Symfony2 Controller class。