我一直在與angular2握手,雖然我對各種概念有很好的總體理解,但DI和導入有點混淆。angular2:「導入」,注入和接口
首先,我進口類(姑且稱之爲「富」)到一個組件(「巴」)
import { Component, OnInit } from '@angular/core';
import { Baz } from './foo';
@Component({
templateUrl: './my.component.html',
styleUrls: ['./my.component.css']
});
export class bar implements OnInit {
private baz:Baz;
ngOnInit():void {
this.baz = new Baz();
}
}
然後,我開始閱讀關於這個模式是多麼糟糕:如果我需要更改Baz的構造函數,我需要重新訪問Baz「新進」的所有代碼。
於是,開始看注射巴茲..
我加@Injectable()
到巴茲,然後改變了組件閱讀
import { Component, OnInit } from '@angular/core';
import { Baz } from './foo';
@Component({
templateUrl: './my.component.html',
styleUrls: ['./my.component.css'],
providers: [Baz]
});
export class bar implements OnInit {
private baz:Baz;
constructor(private baz:Baz) {}
ngOnInit():void {}
}
這一切正常。
但是,它讓我開始思考:DI的全部意義在於允許您/應用程序/測試框架在需要時提供自己的「Baz」版本。
因此,import { Baz } from './foo';
成爲問題,因爲這是一個「具體」的實現,並且與特定的類非常相關。
所有東拉西扯後,我的問題是
我應該使用接口,而不是直接進口?
如果是這樣,那麼作爲全局接口(.d.ts),「/// 引用」還是簡單導入接口定義會更好?
應該在組件012h子模塊或模塊級別定義「providers」部分? - 或者這取決於「Baz」的使用範圍?
是的,對不起,我應該提到我正在使用打字稿。 – jmls