簡體   English   中英

使用依賴項注入容器時明確顯示依賴項

[英]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'屬性在代碼中添加顯式依賴項。 我在這里找到了類似的問題

在Spring中聲明顯式對象依賴項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM