2017-02-25 140 views
1

有關Angular 2中DI的每個教程都將依賴項設置爲構造函數。但是如果我想創建一個類的實例並且該類對其他類具有一些依賴關係,該怎麼辦?Angular 2實例化構造函數之外的依賴注入

我有類A和B.類B應該注入到A.但是A每次都不同,應該能夠創建它的一個實例。

如果我在構造函數中設置了從A開始的DI,如何調用new A()

我試圖將B作爲私有變量添加到A@Inject(B)裝飾。

class A { 
    @Inject(B) b: B; 
} 
+0

如果你使用DI,你*不*調用'new A()';它的關鍵是你不需要解決依賴關係並自己創建實例。 – jonrsharpe

+1

但A應該每次都不同,所以我必須創建一個新的實例。 – R3Tech

+0

我不知道你在說什麼。 – jonrsharpe

回答

1

角度依賴注入只支持構造函數注入。

你可以注入注射器

constructor(private injector:Injector) {} 

foo() { 
    var x = injector.get(B); 
    var a = new A(b); 
} 

這在你的情況下DI注入一個工廠函數,每一個它的調用時返回一個新的實例也可能有幫助。 Create new instance of class that has dependencies, not understanding factory provider

您還可以設置新的注射器,也包括用於查找提供者的父注射器。另見Getting dependency from Injector manually inside a directive

+0

感謝您的快速響應。鏈接背後的兩種方式看起來有點難看 - 更像是「該死的我們需要一種解決方法」。 我的想法是建立一個HTTP構建器,我可以建立我的請求URL,然後只使用http.get(....) – R3Tech

+0

在構建器上調用request()不知道爲什麼你覺得它們很醜。我發現他們都很直接。 –

+0

在上面的例子中,你也可以在構造函數中注入'B'而不是'Injector'。後續對'injector.get(B)'的調用將返回相同的實例(以防萬一這一點不清楚)。 –