我正在開發利用Doctrine 2的Zend Framework項目。我試圖讓Symfony的DI容器與項目一起工作,但我遇到了麻煩。假設我有一個需要注入兩個實例的類「Foo」。我可以設置一個Symfony DI容器沒問題,以便爲我提供一個注入了依賴關係的新「Foo」。大!但是現在如果我想讓「Foo」成爲一個學說實體呢?當我將實體插入到數據庫時,所有這一切都很好,因爲我可以從DI容器中獲取一個新實體並簡單地保留該實體。但是,當我從數據庫主義查詢實體正在實例化我的「Foo」實例並且它們不會注入適當的依賴關係。我如何獲得Doctrine使用我的DI容器,以便實體具有適當的依賴關係?我知道Doctrine提供了一個「postLoad」鉤子,我可以使用它來爲我的實體注入依賴關係,但這種做法會破壞DI容器的用途和優點。Docfine 2與Symfony DI容器
2
A
回答
4
一個學說實體是一個新的,而不是一個注射。實體不應通過DIC創建。查看newable和注射的區別這下面的博客文章:
0
它有點棘手,但它可以做到的。 symfony di容器有一個補丁,它允許你將一個已經存在的對象傳遞給容器構建器實例,並讓di容器爲你配置它(例如,基於接口注入依賴)。該修補程序在github上的此存儲庫中實現:https://github.com/lstrojny/symfony但未將其上傳到symfony主存儲庫。
你使用這樣的:
$user = new User();
$container->configure('someId', $user);
然後,你可以註冊Doctrine's eventmanager進行一餐後的事件處理程序(在這裏看到更多的細節:http://www.doctrine-project.org/docs/orm/2.0/en/reference/events.html)。在這個事件處理程序中,通過上述方法配置加載的實體。這很明顯,但你不能在這種情況下使用構造函數注入,只能使用setter。
設置起來有點棘手,但可以非常強大,特別是與symfony di容器基於接口注入依賴關係的能力相結合。
相關問題
- 1. 與symfony的DI容器
- 2. PHP DI容器
- 3. 用symfony DI
- 4. Docfine 2在Symfony中使用表單類型實體的結果緩存
- 5. 與DI/IoC容器保持聯繫
- 6. Symfony 2:控制器的依賴注入(DI)
- 7. 如何將Symfony DI容器本身注入到服務中?
- 8. 如何正確使用Symfony DI服務容器?
- 9. DI與beforeEach在角2
- 10. Symfony 2,服務容器,導入參數
- 11. 如何選擇DI容器?
- 12. Symfony 2路由註解與容器參數
- 13. Scandir()與getParameter Symfony 2
- 14. Graylog2與Symfony 2(Monolog)
- 15. 沒有註釋或XML文件的Docfine中的Symfony映射
- 16. 問題與角度2測試DI
- 17. 如何自動完成從Symfony 2 DI在netbeans中的方法
- 18. 與DI
- 19. JSR330 DI與彈簧DI
- 20. 中的Symfony 2中的Symfony 2
- 21. Symfony 2與Symfony \ Component \ DomCrawler \ Crawler測試xml
- 22. 關於DI和IoC容器的問題
- 23. DI Boost C++ 14和動態容器
- 24. DI容器和遺留系統
- 25. 角2 DI查詢
- 26. 實例化類型使用AutoMapper與DI容器
- 27. Castle Windsor DI容器內存泄漏
- 28. 爲什麼MEF不是DI/IoC容器?
- 29. 在dotnetcore中獲取DI容器
- 30. DI/IoC容器性能基準比較?
完美。謝謝! – 2011-03-14 14:36:50