lif*_*der 2 dependency-injection angular2-services angular
我认为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) {
}
}
Run Code Online (Sandbox Code Playgroud)
它具有明确的服务要求:
# my.component.ts
import {ProjectService} from './project.service';
export class MyComponent {
constructor(project: ProjectService) {
}
}
Run Code Online (Sandbox Code Playgroud)
官方文档有点不一致,但在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';
Run Code Online (Sandbox Code Playgroud)
这是DI使用的预期方式吗?为什么我们必须在每个需要它的类中导入服务,如果我们不能在启动时描述服务,那么它的好处在哪里?
这与依赖注入无关.您不能在TS中使用未导入的类.
此行引用一个类,DI派生自要注入的实例类型.
constructor(project: ProjectService) {
Run Code Online (Sandbox Code Playgroud)
如果未通过具体导入指定类型,则DI无法知道ProjectService应使用哪个可能的类.
例如,你可以做的是请求一个type(ProjectService)并获得一个不同的实现(子类如MockProjectServiceor EnhancedProjectService,...)
bootstrap(HeroesListComponent, [provide(ProjectService useClass: MockProjectService)]);
Run Code Online (Sandbox Code Playgroud)
这样DI会MockProjectService为以下构造函数注入一个
constructor(project: ProjectService) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |