我使用的是微软自适应卡2.0。我需要创建一些操作服务,并将该服务传递给自适应卡模块,然后它将从那里执行。但在实施过程中,我面临着问题。该操作服务依赖于其他服务,我们无法从构造函数传递该依赖关系。
**ActionService.js**
import ServiceX from '../'
import ServiceZ from '../'
export Class ActionService{
constructor(
private serviceX: ServiceX,
private serviceZ: ServiceZ
)
execute(){
this.serviceX.action()
}
}
**AdaptiveCard service**
import { ActionService } from '../'
import * as AC from 'adaptivecards';
export class AdaptiveCardService{
AC.GlobalRegistry.actions.register('name-of-action', ActionService);
}
这里的问题是,自适应模块使用NEW关键字调用Action服务,而不将依赖项作为参数传递。因此,在执行函数内部的实际服务中,servicex未定义。
是否有任何方法可以在不调用构造函数的情况下注入服务。
我参考了下面的url来注入它,但它只在Angular 2 中受支持
在没有构造函数注入的情况下获取服务实例
您可以使用Injector
。
constructor(private injector: Injector) {
let serviceX: ServiceX= this.injector.get(ServiceX);
}
有关信息,Angular Injector