0

我讀了關於DIDI in Angular.jsAngular.js - Javascript依賴注入

根據我的理解,Angular.js中的DI表示Angular.js允許控制器,工廠,服務或其他人指定依賴關係,而不需要創建依賴關係。

問題:

  1. 在某些點的依賴性已經被創建,使得這裏的依賴性創建沒有死的地方,我該如何理解?
  2. 如果我有:

    var thing = function(dep){ 
        this.dep = dep || new depCreator(); 
    } 
    

    這是死的?或取決於是否將dep傳遞給函數?根據我所看到的,DI意味着允許設置一個依賴關係,最後是一個函數還是對象,這是否意味着將初始化/配置/數據與程序的其他部分分開(邏輯?我們也可以初始化邏輯)?:

    var dep1 = 'qwe'; 
    var thing = function(dep){ this.dep = dep; } 
    var diedThing = new thing(dep1); 
    

    這將允許設置dep1在配置文件中,例如。

  3. 如果普通的JavaScript實現DI是:中

    var thing = function(dep){ 
        this.dep = dep; 
    } 
    

    代替

    var thing = function(){ 
        this.dep = new depCreator(); 
    } 
    

    這是正確的?

    但是如果depCreator依賴於配置文件(或提取的配置)會怎麼辦?

  4. 當我讀到Angular.js有(?)DI時,認爲這個DI意味着Angular.js爲我創建和搜索依賴關係是否正確?還有其他的意義嗎?最後,如果DI非常複雜,但意味着將配置與實現(或邏輯?)分開,爲什麼不把它稱爲單一責任原則,即該方法做了什麼方法,配置做了什麼配置是的,等等。

最後,DI是我一個主觀的概念,這是你如何想象和分裂的責任在某些應用中,這是甚至接近正確的嗎?

對不起,長期以來的問題。

+0

一般而言,'DI'只是一個奇特的名稱,說'傳遞引用,你會得到所有可用的方法.'這更像是委託模式。 – zsong

+0

那種DI簡單地使用函數的形式參數作爲有意義的非本地標識符,將參數名稱與常見角對象(如$ scope)中的屬性進行匹配。任何嗅探匹配都會被前置到調用該函數的「apply()數組」中。 – dandavis

回答

1
  1. 創建依賴關係的地方不依賴於它。它的唯一目的通常是創建「事物」並將其註冊到DI子系統。沒有什麼奇怪的或可疑的。

  2. 你爲什麼要這麼做?如果您需要更多的靈活性,也許取決於爲您創建對象的服務。

  3. DI意味着依賴注入 - 就是說,你不會創建你自己依賴的東西。相反,你要求它和瞧,這是提供給你的。你不需要知道如何創建它,誰創造了它等

  4. 如果depCreator取決於配置文件,然後是罰款。它可以使用它們。在註冊DI子系統之前,它可以做任何事情。這就是你要做的,創建一個服務/工廠depCreator,它可以註冊dep並使其可用於應用程序的其他組件。

  5. 沒有問號。角 DI子系統,它實際上是角度背後的核心思想之一。 Angular爲您提供了許多準備注入的組件,其餘的您必須自行創建並註冊。

  6. 我不知道我是否會說DI是複雜的。實施起來可能比較棘手,我不知道,但是一旦你學會了使用它,你就不會想回去了。 DI角度可能是我見過的最容易使用的。它太好了,透明。過了一段時間,你甚至沒有注意到它在那裏,它的工作原理所以好。

你最後的評論有點正確,我認爲。它以我看到它的方式分離關注點。但是有很多很好的資源可以解釋DI,因此我不會在此詳細說明。一如既往,我會推薦閱讀ng-book以獲取更多角度特定細節。