mcpField
A
android-di-hilt

android-di-hilt

github.com/midudev开发7.0k59 次安装2 周前更新
代码仓库

关于 android-di-hilt

android-di-hilt 是用于配置 Android Hilt 依赖注入的技能,面向 Android 开发者,涵盖组件归属、作用域、绑定方式和测试替换。

主要功能

  1. 01确定组件边界与作用域
  2. 02选择绑定和注入方式
  3. 03规划测试替换与伪实现
  4. 04检查模块归属边界

适用场景

  1. 01注入仓库和调度器
  2. 02为确定性测试替换依赖

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/midudev/autoskills --skill android-di-hilt

安装后在 Claude Code 中输入/android-di-hilt确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
official-links.md
patterns.md
scenarios.md
scripts/
run_examples.sh

详细介绍

Android DI Hilt

适用场景

  • 当请求涉及以下内容时使用此技能:Android Hilt 配置、注入 ViewModel 和 Repository、在 Android 中管理依赖项作用域。
  • 主要目标:使用 Hilt 配置 Android 依赖注入、作用域、测试替换项和模块所有权边界。
  • 当难点在于组件所有权、绑定、作用域、入口点或测试替换时,使用此技能。如果请求仅涉及网络 API 或 reducer 设计,请改用相邻技能。
  • 当范围扩大时,移交给以下技能:
  • android-testing-unit
  • android-networking-retrofit-okhttp

工作流

  1. 首先确定注入边界:应用级单例、Activity 保留范围、ViewModel、Worker、Service,或来自不受支持的框架代码的入口点。
  2. 确定要绑定的内容:构造函数注入、@Binds、@Provides、限定符、多重绑定或辅助注入。
  3. 明确匹配生命周期与作用域,避免依赖项的生命周期超出其所有者,或过于频繁地重新创建。
  4. 使用 Hilt 测试模块、卸载模块,或在合适的组件边界使用 fake,确认测试替换策略。
  5. 只有在 DI 图的所有权关系正确后,才移交与 API 相关或架构相关的问题。

护栏

  • 对于由你负责的应用代码,优先使用构造函数注入。
  • 有目的地使用限定符和作用域注解;绑定不明确是依赖图的异味,而不是便利之举。
  • 将 Hilt 模块放在其所配置的所有权边界附近。
  • 将测试替换视为设计的一部分,而非事后补充。

反模式

  • 为了回避作用域问题,把所有内容都标记为 @Singleton。
  • 当构造函数注入已足够时,仍将业务构造逻辑隐藏在庞大的 @Provides 方法中。
  • 将 Hilt 模块用作跨模块、存放无关绑定的杂物堆。
  • 混淆 DI 图的所有权与应用架构的所有权。

审查重点

  • 组件与作用域是否匹配。
  • 绑定方式与限定符是否明确。
  • 不受支持的入口点桥接方式及测试替换策略。
  • 功能模块与核心代码之间的模块所有权边界。

示例

正常流程
  • 场景:为 OrbitTasks 的 Repository 和 Dispatcher 注入依赖,并明确设置 Hilt 作用域。
  • 命令:cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
边缘情况
  • 场景:在 XML fixture 中替换为 fake 依赖,以便进行确定性测试。
  • 命令:cd examples/orbittasks-xml && ./gradlew :app:testDebugUnitTest
故障恢复
  • 场景:及时捕获特定于 DI 的提示,避免偏离到 architecture-clean 或网络相关内容。
  • 命令:python3 scripts/eval_triggers.py --skill android-di-hilt

完成检查清单

  • 组件生命周期与依赖项生命周期相匹配。
  • 绑定方式明确且可测试。
  • 已在合适的依赖图边界规划测试替换项或 fake。
  • 将非 DI 相关工作移交处理,而不是塞进模块中。

官方参考资料

评论

支持 Markdown