繁体   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