1

我想不出正确的方法来做到这一点,但这是我想要实现的目标:

  • 抽象类引擎

  • TurboEngine 类扩展引擎

  • 类 RocketEngine 扩展引擎

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

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

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

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

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

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

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

TurboEngine 没有供应商!(引擎 -> 涡轮引擎)

更新:

我想使用它的方式:

  • 我有A注入 Engine 的组件(这就是我要选择实现的地方,因此根据某些条件选择 TurboEngine 或 RocketEngine。

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

4

1 回答 1

0

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

您需要提供Enginebootstrap(...)在根组件处提供并在需要的Engine地方注入。

于 2016-08-01T15:09:19.667 回答