我试图在给定字符串名称(即反射)的运行时期间动态地实例化服务。类似的东西:
let myService = new window[myClassName](myParams);
或者,或者:
let myService = Object.create(window[myClassName].prototype);
myService.constructor.apply(myService, myParams);
我查看了Injector
类,但它需要一个类型,而不是字符串(https://angular.io/api/core/Injector)。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
您仍然可以将Injector与字符串结合使用。这只是以您想要的方式提供您的提供商的问题。
这是Angular页面上的示例:https://angular.io/api/core/Injector#example-1
[provide: Square]
是[provide: Square, useClass: Square]
的缩写(当您想要自己实例化服务时,可以使用useFactory
代替useClass
)您可以更改第一个参数(provide
)基本上你想要的任何符号,所以也是字符串。
看看我设置的这个POC https://stackblitz.com/edit/angular-mg1ezb
答案 1 :(得分:-3)
你可以尝试
instance = new window["yourClassName"]();