SuperAPI AI 工具集

effect-dependency-injection

通用与其它

查看项目

更新于 10-16 03:41

技能介绍

用途:面向使用 Effect(TypeScript 函数式效果库)的开发者,讲解依赖注入与依赖管理。核心是通过 Context 定义服务标识,用 Layer 声明服务的构造蓝图,再把层提供给程序,使依赖在类型层面显式可见(Effect 的 R 需求类型参数)。

主要能力:1) 服务定义:用 Context.Tag / Context.GenericTag 创建类型安全的服务标识,接口方法返回 Effect。2) 层构造:Layer.succeed 提供固定值;Layer.effect 构造依赖其他服务的服务;Layer.scoped 用于需要资源获取与释放的服务(如数据库连接),配合 Effect.addFinalizer 注册清理。3) 提供依赖:Effect.provide 提供单个层,Effect.provideService 直接注入服务值,便于测试。4) 层组合:Layer.provide 为层提供依赖,Layer.merge 合并独立层,Layer.provideMerge 构建复杂依赖图。5) 服务模式:仓库模式(Repository)、门面模式(Facade,协调多个服务)、可选依赖(Effect.serviceOption)、按环境切换配置层。6) 测试:用 Layer.effect 配合 Ref 构建内存实现,用 Layer.succeed 写空实现,用 Spy 层记录日志调用并断言。

使用方式:定义服务接口与 Tag,编写对应 Live 层,用管道组合层与提供层,最后通过 Effect.runPromise 等运行器执行。示例命令与代码保持原文形态,未在资料中出现的安装命令、版本要求与运行环境未提供。

适用场景:复杂依赖图管理、可测试应用构建、仓库与门面模式实现、资源生命周期管理、按环境切换实现、测试中替换依赖。

限制与注意事项:资料列出常见陷阱,包括循环依赖、缺少层、过度抽象、未用 scoped 导致资源未清理、测试中误用生产层、服务中错误保存可变全局状态、忽略 R 类型参数错误、层构造过重、层未复用、不清楚层的作用域与销毁时机。资料未提供性能数据、收费信息、支持的框架版本或官方文档之外的其他平台信息。