我正在重構我的控制器之一,使其成爲服務,我想知道是否有性能影響不注入整個服務容器到我的控制器。Symfony2依賴注入:性能影響
是,這是更有效的:
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]
只注入必要的服務並不是唯一的優點:我想使用服務很容易地能夠替換控制器(如果需要的話),通過替換定義配置中的控制器類的參數。我無法弄清楚只注入所需的服務會更有效率,因爲我似乎已經閱讀(也許我錯了)服務使用'Singleton模式',並且只在您第一次需要它時立即執行。所以不需要服務不加載。你爲什麼要談論'Controller'類?它與此無關,僅在symfony中爲新手時纔有意思。 – Elorfin
我正在寫'Controller'類,因爲我想告訴你標準Controller和控制器定義爲服務的區別是什麼 - 簡單的PHP類。主要區別在於擴展'ContainerAware'(提供對DIC的訪問)。當然你有權利 - 當你將Controller定義爲服務時,你可以簡單地更改控制器類。關於'單身模式'你錯了。有2個作用域:用於服務的'container','prototype'(和額外的'request')。請看:http://symfony.com/doc/current/cookbook/service_container/scopes。html – NHG
我已經從您的鏈接和其他文檔部分找到的信息做出答案。看起來,即使不推薦整個DIC的注入,性能也沒有實際差異。除非我不知道Instanciate請求的服務,否則'ServiceContainer'中有後臺進程。 – Elorfin