2014-04-28 163 views
2

可以將工廠模式(工廠方法,簡單工廠方法和抽象工廠)或服務定位器模式獲取依賴關係稱爲依賴注入。依賴注入的方式

我的理解是通過這種實例化依賴關係的方式,高級別的類仍然需要了解Factory或Service定位器。依賴注入意味着依賴關係被推動,而不是像工廠類型和最佳方式一樣被拉動正在使用像NInject,Unity,CastleWindsor等控件容器的反轉,請分享您的意見。

回答

1

不,他們不能。

依賴注入是實現IoC或控制反轉的模式。它意味着,這些類不應該彼此緊密耦合,並且不應該知道在哪裏獲取他們的依賴。

控制原理的倒置通常表達爲「不要打電話給我們,我們會打電話給你」 - 在這種情況下,由IoC容器管理的類應該不知道任何關於它們的依賴關係以及如何獲取它們。工廠模式和服務定位器意味着,實際使用類知道獲取該依賴關係的方式。

UPDATE

我還想引用馬丁:

最根本的選擇是服務定位器和依賴注入 之間。第一點是這兩種實現都提供了 基本解耦,這在原始示例中是缺少的 - 在 的情況下,應用程序代碼獨立於服務接口的具體實現 。兩個 模式之間的重要區別在於如何將該實現提供給 應用程序類。使用服務定位器,應用程序類會通過消息向定位器明確請求 。有了注入沒有 明確的要求,該服務出現在應用程序類 - 因此 控制反轉。

http://martinfowler.com/articles/injection.html