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