在Angular 2中,我们如何装饰一个类并维护原始构造函数的依赖注入?

时间:2016-01-04 19:10:14

标签: angular

所以我试图装饰一个类,它工作正常,除了我丢失了我原来的类的构造函数依赖注入,所以当然一​​切都失败了。

所以我原来的课程是:

@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构造函数签名)。

感谢阅读,

此致

肖恩。

1 个答案:

答案 0 :(得分:1)

据我所知,你正在调用App构造函数而不传递所需的参数。 DI必须从顶部开始,因为这是DI的基本原则。

如果你只是扩展课程

,同样适用
MyApp extends App{
  constructor(commBroker:CommBroker){
    super(commBroker)
  }
}

如果它不能以这种方式工作,你会否定DI的很多好处,因为你将依赖控制委托给另一个组件(在这种情况下是基础)