关于 interfaces-and-autowiring
interfaces-and-autowiring 是用于 Symfony 服务接口设计与依赖注入的开发技能。内容涵盖实现选择、装饰器、带标签的集合、标量注入,以及排查自动装配失败。
主要功能
- 01提取精简的服务接口
- 02通过别名选择实现
- 03使用装饰器添加行为
- 04注入标量和带标签的服务
- 05用 debug:autowiring 排查自动装配
适用场景
- 01让服务可在测试中替换
- 02从多个实现中选择一种
- 03添加日志、缓存或重试行为
- 04解决自动装配失败或类型歧义
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill interfaces-and-autowiring安装后在 Claude Code 中输入/interfaces-and-autowiring确认已加载。
附带文件reference.md
详细介绍
接口与自动装配(Symfony)
适用场景
- 服务依赖于具体类,且必须能够替换,或在测试中替换。
- 某个接口有多个实现,必须注入正确的实现。
- 在现有服务周围添加横切行为(日志记录、缓存、重试)。
- 注入标量、参数、环境变量,或所有带有某个标签的服务。
- 自动装配失败,提示“cannot autowire”或类型不明确。
默认工作流
- 为消费者实际需要的功能提取一个专注的接口。
- 如果只有一个实现,就让自动装配绑定该接口。
- 如果有多个实现,则通过命名别名和
#[Target]为每个消费者选择一个实现。 - 使用
#[AsDecorator]为服务添加行为,而不是编辑或扩展该服务。 - 使用
#[Autowire]注入标量,使用#[AutowireIterator]注入带标签的集合。 - 对涉及的每种类型运行
debug:autowiring,确认结果。
防护原则
- 使用构造函数注入和
private readonly依赖;不使用 setter 注入,也不访问容器。 - 保持接口精简:每个接口只满足一种消费者需求。
- 默认将服务设为
final,通过装饰服务而非继承来扩展行为。 - 只有当某些执行路径会跳过昂贵依赖时,才使用惰性服务或服务闭包。
渐进式披露
- 使用此文件了解执行方式和风险控制。
- 需要深入了解实现细节时,再打开参考资料。
输出约定
- 接口,以及用于选择各个实现的绑定或别名。
- 装饰器或带标签的集合及其优先级。
- 涉及类型的
debug:autowiring输出。
参考资料
reference.md
评论
支持 Markdown