2013-08-02 42 views
0

我有一個類,我通過依賴注入在Symfony 2中加載。 它有一些默認的私有變量,我可以用setter覆蓋。Symfony2依賴注入是否支持對象生活?

問題是,一旦這些默認值之一被設置爲頁面內的其他內容,就無法自動將其設置回去。 我不想使用再次調用該類,因爲它消除了依賴注入的有用性。

那麼,Symfony2是否支持Object LifeStyle,還是我基本上需要編寫一個公共函數,將所有默認值重置爲正常,並在每次需要時調用它。

作爲一個例子,我使用一個類來獲取遠程文件。它具有UserAgent,Accepted Language/Encoding,Method等默認值。但是如果我將Method設置爲POST,而不是頁面中一次調用的默認GET,那麼下次我調用它時,它仍然是POST,在那裏作爲I希望它再次成爲默認的GET,如果我使用新的而不是通過依賴注入,它將會是。

+0

一些可能的解決辦法:不要使用共享服務(創建每當一個新的實例);使用範圍 –

回答

0

將範圍:原型添加到您的服務定義中。這將確保您每次請求課程時都能從容器中獲取新實例。當然,實例將具有默認值。

http://symfony.com/doc/current/cookbook/service_container/scopes.html

+0

正是我需要的!謝謝。我將添加我在$ container-> register('x') - > setScope()而不是$ container-> setDefinition('x') - > setScope()下使用它。但仍然是我需要的! – Adi

+0

如何將我的類的範圍設置爲原型,而不必將所有父類,控制器等都設置爲原型?我感興趣的類是原型,但不是它注入的東西。目前,它出現了ScopeCrossingInjectionException。 – Adi

+0

例如就目前而言,如果我的遠程文件類是prototype,任何使用我的遠程文件類的類或控制器都必須設置爲原型。 – Adi