用途
该技能面向 Angular v20+ 的依赖注入(DI)实现,指导如何用 inject() 函数替代构造函数注入,并通过 InjectionToken 与 provider 配置完成服务提供与依赖解析,主要用于服务架构设计、依赖提供和注入配置。
主要能力
- 基础注入:推荐在组件中使用 inject() 注入依赖,示例中含 HttpClient 与自定义服务 User。
- 可注入服务:用 @Injectable({ providedIn: "root" }) 定义根级单例服务,结合 signal 管理状态。
- 提供者作用域:区分根级(providedIn 或 app.config.ts 的 providers 数组)、组件级(组件 providers 数组,每个组件实例一份)、路由级(路由 providers,在该路由树内共享)。
- 注入令牌:用 InjectionToken 创建值令牌、对象令牌,以及带 factory 的自提供令牌(如 WINDOW、LOCAL_STORAGE);并演示在 providers 中通过 useValue 提供取值、在服务中 inject 注入。
- 提供者类型:useClass(含按环境条件切换实现)、useValue(静态值与配置对象)、useFactory(带 deps 的工厂,或异步工厂但不推荐,改用 provideAppInitializer)、useExisting(别名到已有提供者,可让多个令牌指向同一实例)。
- 注入选项:optional(未提供时返回 null)、self(仅当前组件注入器)、skipSelf(跳过当前向父级查找)、host(仅向上查找到宿主组件)。
- 多提供者:用 multi: true 为同一令牌收集多个值,注入为数组;HTTP 拦截器内部即采用多提供者机制,通过 provideHttpClient(withInterceptors([...])) 注册多个拦截器。
- 应用初始化器:用 provideAppInitializer 在应用启动前运行异步代码,可配置多个初始化器。
- 环境注入器:用 createEnvironmentInjector 以编程方式创建注入器;用 runInInjectionContext 在注入上下文中执行代码。
使用方式
资料以 TypeScript 代码示例呈现各类用法,涵盖组件、服务、app.config.ts 与路由配置。示例代码需保留原样,具体接入项目的方法暂未提供。高级模式可参考 references/di-patterns.md。
适用场景
适用于 Angular v20+ 项目中的服务架构设计、依赖提供与注入配置,包括单例服务、组件级状态、路由级共享服务、配置与令牌注入、多实现校验器、HTTP 拦截器等。
限制
资料未说明该技能的安装命令、版本兼容范围之外的环境要求、性能影响或收费信息,这些暂未提供。