繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM