gpt4 book ai didi

angular - 进行构造函数依赖注入(inject)时是否需要 [providers]?

转载 作者:行者123 更新时间:2023-12-05 03:08:57 33 4
gpt4 key购买 nike

通过这个todo tutorial它具有以下内容:

 import {TodoDataService} from './todo-data.service';

@Component({
// ...
providers: [TodoDataService]
})

constructor(private todoDataService: TodoDataService) {
}

IIUC 我们必须在 providers 数组中声明 TodoDataService。这似乎是多余的。 Angular DI 能否读取为组件生成的元数据并使用构造函数注入(inject)自动注入(inject) TodoDataService

更新

Angular 已将此实现到 some extent now .我要求他们也删除 providedIn:root,他们说他们在路线图上有相关内容。

最佳答案

来自Angular.io docs :

Injector bubbling

When a component requests a dependency, Angular tries to satisfy that dependency with a provider registered in that component's own injector. If the component's injector lacks the provider, it passes the request up to its parent component's injector. If that injector can't satisfy the request, it passes it along to its parent injector. The requests keep bubbling up until Angular finds an injector that can handle the request or runs out of ancestor injectors. If it runs out of ancestors, Angular throws an error.

我对此的理解是,如果您的组件提供服务,那么您每个组件 都会获得该服务的一个实例。如果没有,它会在组件树中向上移动,直到找到确实提供它的东西。所以某些东西必须提供它。

我认为它实际上确实检查了生成的元数据,但它只是用它来查看组件需要什么服务,而不是服务来自哪里(这就是 providers:[ TodoDataService] 用于).

在我的应用程序中,我的大部分服务都在我的 app.module.ts 中提供,因此我在整个应用程序中获得每个服务的一个实例。

关于angular - 进行构造函数依赖注入(inject)时是否需要 [providers]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44336319/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com