[英]Making dependencies explicit while using a dependency injection container
關於依賴項注入的一大優點是,在其接口(即構造函數)中顯式定義了類的依賴項。 但是,如果使用依賴項注入容器,則許多這些依賴項將合並為一個依賴項(容器)。 因此,許多類的真正依賴項隱藏在容器的后面。 如何避免這種情況,以便在使用依賴項注入容器時仍可以明確定義依賴項?
是的,不是,這實際上取決於依賴項注入容器的工作方式。
我看不到這種代碼有任何問題:
class Class1 {
/**
* @Inject
* @var Class2
*/
private $class2;
}
即使依賴項將由容器注入, Class1
依賴於Class2
的事實還是相當明顯的。 (這里使用的依賴注入容器是PHP-DI )
3年前,我問了這個問題,從那時起,我開始理解並喜歡靜態類型語言中的DI。
當我問這個問題時,我似乎不明白“服務定位器”和“依賴注入容器”(DIC)之間的區別。
DIC在應用程序“下方”運行,並負責構造對象和構建對象圖,通常在引導過程中,但如果完全引導則在應用程序之前。 班級不應意識到DIC,也不應依賴於它。 DIC應該構造該類的所有依賴項,並將其注入,就好像是手動實例化該類一樣。
服務定位器是在系統中傳遞的對象,用於查找依賴項。 使用服務定位器可以掩蓋依賴性(學習這些東西時我注意到的原始問題)並創建系統范圍的依賴性(即服務定位器本身)。
通常,我會避免使用服務定位器模式(有人稱其為“反模式”)。 使用諸如Ninject或Symfony 2的DIC之類的優質DIC,您的課程將專注於其中的業務邏輯-而不是查找依賴項。
閱讀有關依賴注入的Martin Fowlers文章: http : //www.martinfowler.com/articles/injection.html
似乎可以在bean定義中使用'depends-on'屬性在代碼中添加顯式依賴項。 我在這里找到了類似的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.