[英]Angular2 - Injecting services by manually resolving the type runtime
我无法找到正确的方法,但这是我想要实现的目标:
抽象类引擎
TurboEngine类扩展了Engine
class RocketEngine扩展了Engine
我有一个角度应用程序,它在很多地方注入“引擎”并使用它的方法来满足业务需求。
我唯一的问题是我必须在每个地方同时注入TurboEngine和RocketEngine并且有条件,决定调用哪个。
这就是我想要改变的。 由于我有一个抽象的引擎,我想在我的主要组件中将它注入ONCE,然后在我的组件中自动注入。
所以基本上在运行时定义服务的提供者。
这是我尝试过的,但没有奏效:
var injector = ReflectiveInjector.resolveAndCreate([
provide(Engine, {useClass: TurboEngine})
]);
我在我的主要组件中完成了它,但是所有其他地方我都有以下错误:
没有TurboEngine的供应商! (发动机 - > TurboEngine)
更新:
我想用它的方式:
我有组件A
注入引擎(这是我想要选择实现的地方,所以TurboEngine或RocketEngine基于某些条件。
然后我有组件B
,它在组件A
的模板中。 在这里,当我尝试注入Engine
我希望拥有与在组件A
手动创建的实例化对象相同的对象
ReflectiveInjector.resolveAndCreate([...])
创建一个新的独立注入器,它只知道Engine
并且与Angular应用程序使用的注入器完全无关。
您需要为Engine
提供bootstrap(...)
或根组件,并在您需要的地方注入Engine
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.