所以我试图装饰一个类,它工作正常,除了我丢失了我原来的类的构造函数依赖注入,所以当然一切都失败了。
所以我原来的课程是:
@RefreshTheme
export class App implements AfterContentInit {
private m_commBroker:CommBroker;
private m_styleService:StyleService;
constructor(commBroker:CommBroker, styleService:StyleService) {
this.m_styleService = styleService;
this.m_commBroker = commBroker;
...
所以你可以看到我是DI commBroker和styleService
和我的@RefreshTheme是:
export function RefreshTheme<TFunction extends Function>(Target: TFunction): TFunction {
var newConstructor = function () {
Target.apply(this);
Object.freeze(this);
};
newConstructor.prototype = Object.create(Target.prototype);
newConstructor.prototype.constructor = Target;
return <any> newConstructor;
}
并且只要我不在原始类中使用DI,一切都很好......但我需要尊重原始的类构造函数而不管它是什么(diff类当然会有diff构造函数签名)。
感谢阅读,
此致
肖恩。
答案 0 :(得分:1)
据我所知,你正在调用App构造函数而不传递所需的参数。 DI必须从顶部开始,因为这是DI的基本原则。
如果你只是扩展课程
,同样适用MyApp extends App{
constructor(commBroker:CommBroker){
super(commBroker)
}
}
如果它不能以这种方式工作,你会否定DI的很多好处,因为你将依赖控制委托给另一个组件(在这种情况下是基础)