Angular 依赖注入:供应商与进口

Angular dependency injection: providers vs imports

关于依赖注入的 Angular 文档让我感到困惑。
我知道 Angular DI 的工作原理是通过传递给 NgModule(对于整个模块)或 Component(对于那个组件).

这个问题不是特定于响应式表单,但在响应式表单的angular.io示例中,它的组件定义为(简化!):

import {FormBuilder, FormGroup, Validators} from '@angular/forms';

@Component({
  template: '<p>Hello world</p>'
})
export class DepInjectionExample
{
     constructor(private formBuilder: FormBuilder)
     {
        //Use form builder here
     }
}

现在可以了(我有一个反应式表格可以工作),但是怎么做呢?在 Component providers 数组或其包含的 NgModule providers 数组中,FormBuilder 没有 "provider"。然而 Angular DI 文档坚持 providers 数组是为 DI 注册某些东西的唯一方法。这是怎么回事?一些注入的东西怎么可能不需要在providers数组中呢?

提前致谢。


更新答案

啊!我从供应商页面看到: "when you import a module that has providers, those providers are also available to all the classes in the app as long they have the lookup token. For example, if you import the HttpClientModule into your AppModule, its providers are then available to the entire app and you can make HTTP requests from anywhere in your app." https://angular.io/guide/providers

我没有意识到导入模块的提供者会自动成为导入模块的提供者。

ReactiveFormsModule 提供 FormBuilder Service。因此,当您在模块中 imports: [ReactiveFormsModule] 时,您也在提供 FormBuilder

FormBuilderReactiveFormsModule 的一个特征。它就像您添加到应用程序中的任何其他模块一样。您可以看到此行为的另一个是 MatDialog 服务,它由 MatDialogModule.

提供

这是 Angular 使用的模块模式。我们使用 modules 将特征分组为 (service, pipe, directive, routes and components) 及其依赖项。

docs 他们说:

NgModules configure the injector and the compiler and help organize related things together.

正如用户指出的:"imported module's providers automatically became providers for the importing module."