2017-02-25 65 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)'的调用将返回相同的实例(以防万一这一点不清楚)。 –