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 の使用方法ですか? サービスを必要とするすべてのクラスにサービスをインポートする必要があるのはなぜですか? また、起動時にサービスを一度だけ記述できない場合の利点はどこにありますか?

4

1 に答える 1

5

これは、依存性注入とはまったく関係ありません。インポートされていないクラスを TS で使用することはできません。

この行はクラスを参照し、DI は注入するインスタンスの型から派生します。

constructor(project: ProjectService) {

型が具体的なインポートによって指定されていない場合、DI は可能なすべてのProjectServiceクラスのどれを使用する必要があるかを知ることができません。

たとえば、型 ( ) を要求して、別の実装 (またはのProjectServiceようなサブクラス) を取得することができます。MockProjectServiceEnhancedProjectService

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

このように、DI はMockProjectService次のコンストラクターに a を挿入します。

 constructor(project: ProjectService) {
于 2016-01-18T15:11:18.353 に答える