2010-10-16 67 views
0

這是我目前所知:如何使用IoC容器?我不明白這一點

  • DI讓我建立可重複使用的,單位可測試組件

  • DI是冗長的,因爲它要求我明確設置的依賴關係(通過構造函數或方法,但我仍然不明白接口注入)。這就是爲什麼需要容器或服務定位器的原因。

  • 容器比服務定位器更好,因爲類不需要知道它的存在。

但我發現這些問題:

  • 一些類現在將取決於從容器?如果我不使用每個類的默認配置,如我的服務文件中所述,某些類需要調用容器來重新配置所需的對象。

  • 從這張幻燈片http://www.slideshare.net/fabpot/dependency-injection-with-php-53的第79頁上,Fabien Potencier說Container並不管理所有對象,只有那些只有一個實例(但不是單例)的對象。我現在更加困惑。

任何幫助,非常感謝。 =)

回答

0

現在有些類會依賴Container嗎?

不。這就是爲什麼您使用依賴注入而不是服務位置。

在79頁從這張幻燈片......

見82頁,它說: 「不同於模型對象」。老實說,我永遠不會解釋它(「只有一個實例的對象(!= Singletons)」是錯誤的或非常特定於PHP的東西,它通常不適用於依賴注入或IoC + DI容器),但是我打賭他試圖解釋的是容器通常管理類似服務的事情,而不是類似於模型的事情。

+0

如果他們不依賴於容器,那麼他們如何創建具有非默認配置的孩子(即:運行時定義的設置)? – HappyDeveloper 2010-10-16 02:22:16

+0

@HappyDeveloper:它是完成所有佈線和配置的容器。單獨的類*接收*依賴和配置。 – 2010-10-16 02:27:10

+0

是的,我知道,但只適用於默認對象創建。如果在程序執行的某個點(在孩子的孩子的孩子的方法內),出於某種原因,我需要一個說法,DB_Cache依賴項,而不是File_Cache?我需要調用容器 – HappyDeveloper 2010-10-16 03:53:12