[英]Dependency Injection in Angular 2
我認為實施DI是為了允許在應用程序上使用相同的服務,並根據需要更改它們。 但是,此代碼段(Angular 2.0.0-beta.0)拒絕工作:
# boot.ts
import {ProjectService} from './project.service'
bootstrap(AppComponent, [ProjectService]);
# my.component.ts
export class MyComponent {
constructor(project: ProjectService) {
}
}
並具有明確的服務要求,它可以工作:
# my.component.ts
import {ProjectService} from './project.service';
export class MyComponent {
constructor(project: ProjectService) {
}
}
官方文檔有些不一致,但在plunkr示例中具有相同之處:
# boot.ts
import {HeroesListComponent} from './heroes-list.component';
import {HeroesService} from './heroes.service';
bootstrap(HeroesListComponent, [HeroesService])
# heroes-list.component.ts
import {HeroesService} from './heroes.service';
這是DI使用的預期方式嗎? 為什么我們必須在每個需要該服務的類中導入服務,如果我們不能僅在啟動時就描述該服務,那么好處是什么?
這實際上與依賴注入無關。 您不能在TS中使用未導入的類。
該行引用一個類,DI從該類型派生要注入的實例。
constructor(project: ProjectService) {
如果具體導入未指定類型,則DI無法知道應使用所有可能的ProjectService
類中的哪個。
例如,您可以做的是請求一個類型( ProjectService
)並獲得一個不同的實現(子類,例如MockProjectService
或EnhancedProjectService
,...)
bootstrap(HeroesListComponent, [provide(ProjectService useClass: MockProjectService)]);
這樣,DI將為以下構造函數注入MockProjectService
constructor(project: ProjectService) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.