2012-03-26 54 views
14

我讀這:http://symfony.com/doc/current/book/service_container.html具有多個實例的Symfony 2服務?

它說:

$mailer = $this->get('my_mailer'); 

作爲一個額外的獎勵,梅勒服務只創建一次,每次索要服務時間 相同的實例返回。這幾乎總是您需要的行爲(它更加靈活並且功能強大),,但我們稍後將學習如何配置 具有多個實例的服務。

如何使我的服務有多個實例 - 即每當我到達服務時,我都會得到一個新的實例?像$this->getNew()什麼的?

回答

31

您正在討論服務的範圍。你可以看看他們here。總之,定義服務的範圍原型而不是默認的容器和依賴注入容器會照顧到創建一個新的對象每次提出要求:

services: 
    my_service: 
     class: Someclass 
     scope: prototype 

注:由於Symfony2.8,scope: prototype一直換成shared: false

# Symfony >= 2.8 
services: 
    my_service: 
     class: Someclass 
     shared: false 
+4

有沒有辦法只強制重新創建有時並不總是? – 2014-02-11 07:33:33

+0

@RezaSanaie您可能需要定義一個抽象服務並進行兩次擴展,以獲得其原型和容器範圍的版本。如果您需要保留原型的新實例,則可以通過將新實例設置爲它來覆蓋容器作用域。 – 2014-05-12 15:29:40

相關問題