通过本待说教程,它具有以下内容:
import {TodoDataService} from './todo-data.service';
@Component({
// ...
providers: [TodoDataService]
})
constructor(private todoDataService: TodoDataService) {
}
iiuc我们必须在提供商数组中声明TodoDataService
。这似乎是多余的。Angular DI可以读取该组件的生成的元数据,并使用构造函数自动注入TodoDataService
?
更新
Angular现在已经在某种程度上实施了这一点。我也要求他们删除providedIn:root
,他们说他们在路线图上有东西。
来自angular.io docs:
喷油器冒泡
当组件请求依赖关系时,Angular试图通过该组件自己的喷油器中注册的提供商来满足该依赖关系。如果组件的喷油器缺乏提供商,则将请求传递给其父组件的喷油器。如果该喷油器无法满足请求,则将其传递给其父型注射器。这些请求一直在冒泡,直到Angular找到可以处理请求或用祖先注射器用光的喷油器为止。如果祖先用完了,角度会引发错误。
我对此的理解是,如果您的组件提供服务,则每个组件的一个实例。如果没有,它将走上组件树,直到找到确实提供的东西为止。因此,某种东西必须提供。
我认为它实际上是检查生成的元数据,但是它仅用于查看组件需要什么服务,而不是服务的来源(这是providers:[TodoDataService]
的目的(。<<<<<<<<<<<<<</p>
在我的应用程序中,我的大多数服务都在我的app.module.ts
中提供,因此我在整个应用程序中获得了每个服务的一个实例。