用途:面向构建模块化、可测试 Angular 应用的依赖注入(DI)实践,讲解服务架构与 Provider 配置。
主要能力:以 inject() 函数(Angular 14+)作为首选注入方式,无需构造函数参数;服务可用 @Injectable({ providedIn: 'root' }) 声明为根级可注入。Provider 类型包括 useClass(类提供者)、useValue(值提供者)、useFactory(工厂提供者,工厂内可直接用 inject() 解析依赖)、useExisting(别名提供者)。支持 InjectionToken 定义类型安全令牌并设默认工厂值。层级注入器涵盖根注入器(全应用单例)、组件注入器(每组件实例独立)、元素注入器(指令级)。providedIn 可选 root 或 platform。inject() 选项可替代 @Optional、@Self、@SkipSelf、@Host,如 { optional: true }、{ self: true }、{ skipSelf: true }、{ host: true }。环境 Provider 用 makeEnvironmentProviders 与 provideX() 函数替代 NgModule.forRoot()/forChild(),并可在懒加载路由中提供子作用域 Provider。多 Provider 通过 multi: true 注册为数组注入。树摇优化依赖 providedIn: 'root'。测试中用 TestBed.configureTestingModule 覆盖 Provider,配合 jasmine.createSpyObj 与 TestBed.inject 注入被测服务。
使用方式:在独立组件中通过 @Component 的 providers 数组配置,而非 NgModule;在 bootstrapApplication 中传入 providers;工厂内使用 inject() 无需 deps 数组。
适用场景:模块化服务架构、可测试组件与服务、配置管理、插件/扩展系统、多 Provider 模式(拦截器、校验器)、复杂服务层级、懒加载路由隔离、树摇代码。
限制:资料未提供具体版本兼容范围、性能数据、收费或平台信息;示例基于 Angular 14+ 的 inject() 与独立组件写法。