Angular2 - 通过手动解析类型运行时注入服务

时间:2016-08-01 15:05:10

标签: angular angular2-services angular2-components

我无法找到正确的方法,但这就是我想要实现的目标:

  • 抽象类引擎

  • 类TurboEngine扩展引擎

  • 类RocketEngine扩展Engine

我有一个角度应用程序,它在许多地方注入“引擎”并使用它的方法来满足业务需求。

我唯一的问题是我必须在每个地方同时注射TurboEngine和RocketEngine并且有条件,决定拨打哪个。

这就是我想要改变的。由于我有一个抽象的引擎,我想将它注入我的主要组件中,然后通过这种方式自动注入我的组件。

所以基本上在运行时定义服务的提供者。

这是我尝试过的,但没有奏效:

var injector = ReflectiveInjector.resolveAndCreate([
    provide(Engine, {useClass: TurboEngine})
]);

我在我的主要组件中完成了它,但是所有其他地方我都有以下错误:

  

没有TurboEngine的提供商! (引擎 - > TurboEngine)

更新:

我想用它的方式:

  • 我有组件A注入引擎(我想选择一个实现,所以TurboEngine或RocketEngine基于某些条件。

  • 然后我有组件B,它位于组件A的模板中。在这里,当我尝试注入Engine时,我期望拥有与在组件A中手动创建的实例化对象

1 个答案:

答案 0 :(得分:0)

ReflectiveInjector.resolveAndCreate([...])创建一个新的独立注入器,它只知道Engine并且与Angular应用程序使用的注入器完全无关。

您需要向Engine提供bootstrap(...)或在根组件中提供,并在您需要的位置注入Engine