簡體   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