簡體   English   中英

Angular 2中的依賴注入

[英]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 )並獲得一個不同的實現(子類,例如MockProjectServiceEnhancedProjectService ,...)

bootstrap(HeroesListComponent, [provide(ProjectService useClass: MockProjectService)]);

這樣,DI將為以下構造函數注入MockProjectService

 constructor(project: ProjectService) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM