mcpField
I
interfaces-and-autowiring

interfaces-and-autowiring

github.com/dev-toolings开发22799 次安装3 周前更新
代码仓库

关于 interfaces-and-autowiring

interfaces-and-autowiring 是用于 Symfony 服务接口设计与依赖注入的开发技能。内容涵盖实现选择、装饰器、带标签的集合、标量注入,以及排查自动装配失败。

主要功能

  1. 01提取精简的服务接口
  2. 02通过别名选择实现
  3. 03使用装饰器添加行为
  4. 04注入标量和带标签的服务
  5. 05用 debug:autowiring 排查自动装配

适用场景

  1. 01让服务可在测试中替换
  2. 02从多个实现中选择一种
  3. 03添加日志、缓存或重试行为
  4. 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”或类型不明确。

默认工作流

  1. 为消费者实际需要的功能提取一个专注的接口。
  2. 如果只有一个实现,就让自动装配绑定该接口。
  3. 如果有多个实现,则通过命名别名和 #[Target] 为每个消费者选择一个实现。
  4. 使用 #[AsDecorator] 为服务添加行为,而不是编辑或扩展该服务。
  5. 使用 #[Autowire] 注入标量,使用 #[AutowireIterator] 注入带标签的集合。
  6. 对涉及的每种类型运行 debug:autowiring,确认结果。

防护原则

  • 使用构造函数注入和 private readonly 依赖;不使用 setter 注入,也不访问容器。
  • 保持接口精简:每个接口只满足一种消费者需求。
  • 默认将服务设为 final,通过装饰服务而非继承来扩展行为。
  • 只有当某些执行路径会跳过昂贵依赖时,才使用惰性服务或服务闭包。

渐进式披露

  • 使用此文件了解执行方式和风险控制。
  • 需要深入了解实现细节时,再打开参考资料。

输出约定

  • 接口,以及用于选择各个实现的绑定或别名。
  • 装饰器或带标签的集合及其优先级。
  • 涉及类型的 debug:autowiring 输出。

参考资料

  • reference.md

评论

支持 Markdown