我无法找到正确的方法,但这就是我想要实现的目标:
抽象类引擎
类TurboEngine扩展引擎
类RocketEngine扩展Engine
我有一个角度应用程序,它在许多地方注入“引擎”并使用它的方法来满足业务需求。
我唯一的问题是我必须在每个地方同时注射TurboEngine和RocketEngine并且有条件,决定拨打哪个。
这就是我想要改变的。由于我有一个抽象的引擎,我想将它注入我的主要组件中,然后通过这种方式自动注入我的组件。
所以基本上在运行时定义服务的提供者。
这是我尝试过的,但没有奏效:
var injector = ReflectiveInjector.resolveAndCreate([
provide(Engine, {useClass: TurboEngine})
]);
我在我的主要组件中完成了它,但是所有其他地方我都有以下错误:
没有TurboEngine的提供商! (引擎 - > TurboEngine)
更新:
我想用它的方式:
我有组件A
注入引擎(我想选择一个实现,所以TurboEngine或RocketEngine基于某些条件。
然后我有组件B
,它位于组件A
的模板中。在这里,当我尝试注入Engine
时,我期望拥有与在组件A
中手动创建的实例化对象
答案 0 :(得分:0)
ReflectiveInjector.resolveAndCreate([...])
创建一个新的独立注入器,它只知道Engine
并且与Angular应用程序使用的注入器完全无关。
您需要向Engine
提供bootstrap(...)
或在根组件中提供,并在您需要的位置注入Engine
。