使用ReflectiveInjector注入服务,而不指定依赖关系树中的所有类

And*_*eas 2 dependency-injection angular

我目前有一个为我生成一个对象的服务,它应该表现为一种活动记录,因为它可以懒得填充自己作为访问它的属性.

我的第一种方法是将生成的对象使用的服务注入到创建服务中,并将它们传递给创建的对象的构造函数,但由于创建服务从不使用这些服务,因此它看起来很脏.

第二个apporach是使用ReflectiveInjector:

let injector = ReflectiveInjector.resolveAndCreate(
                    [
                        ClassToBeCreated,
                        ServiceA,
                        ServiceB,
                        ServiceC
                    ]
                )
let created = injector.get(ClassToBeCreated)
Run Code Online (Sandbox Code Playgroud)

但这崩溃了:

EXCEPTION: No provider for Http! (ClassToBeCreated -> ServiceA -> Http)
Run Code Online (Sandbox Code Playgroud)

如果我在resolveAndCreate中指定Http,它将失败并具有Http的下一个依赖项.

有没有一种方法可以注入而无需在树上指定所有依赖项并让角度处理它?

我是否以一种根本错误的方式处理这个问题?

任何帮助是极大的赞赏.

Gün*_*uer 5

您可以创建已注册这些提供程序的父注入器的子注入器:

constructor(private injector:Injector) {}

...

someMethod() {    
  let resolvedProviders = ReflectiveInjector.resolve([Car, Engine]);
  let child = ReflectiveInjector.fromResolvedProviders(resolvedProviders, this.injector);
}
Run Code Online (Sandbox Code Playgroud)

另请参阅在Angular 2中使用ComponentResolver加载组件时注入不同的提供程序