我目前有一个为我生成一个对象的服务,它应该表现为一种活动记录,因为它可以随意填充自己作为访问它的属性。
我的第一种方法是将生成的对象使用的服务注入到创建服务中,并将它们传递给创建的对象的构造函数,但由于创建服务从不使用这些服务,所以它看起来很脏。
第二个用途是使用ReflectiveInjector:
let injector = ReflectiveInjector.resolveAndCreate(
[
ClassToBeCreated,
ServiceA,
ServiceB,
ServiceC
]
)
let created = injector.get(ClassToBeCreated)
但这会崩溃:
EXCEPTION: No provider for Http! (ClassToBeCreated -> ServiceA -> Http)
如果我在resolveAndCreate中指定Http,它将失败,并具有Http的下一个依赖项。
有没有办法注入而不必在树上指定所有依赖项并让角度处理它?</ p>
我是否以一种根本错误的方式处理这个问题?
非常感谢任何帮助。
答案 0 :(得分:5)
您可以创建已注册这些提供程序的父注入器的子注入器:
constructor(private injector:Injector) {}
...
someMethod() {
let resolvedProviders = ReflectiveInjector.resolve([Car, Engine]);
let child = ReflectiveInjector.fromResolvedProviders(resolvedProviders, this.injector);
}
另见Injecting different providers while loading components using ComponentResolver in Angular 2