Android Hilt 依赖注入与作用域

举报
yd_229723446 发表于 2026/10/05 18:15:33 2026/10/05
【摘要】 Android Hilt 依赖注入与作用域摘要:依赖注入把对象创建与业务使用分开,让服务替换、测试和生命周期管理更清楚。本文介绍注入边界、作用域和依赖图的常见问题。 一、从显式依赖开始业务对象应通过构造参数声明需要的仓库、服务或时钟,而不是在内部自行创建数据库和网络客户端。构造注入能让依赖关系容易阅读,也便于在单元测试中直接传入替代实现。接口和实现之间的映射应显式声明。第三方类型、需要额外...

Android Hilt 依赖注入与作用域

摘要:依赖注入把对象创建与业务使用分开,让服务替换、测试和生命周期管理更清楚。本文介绍注入边界、作用域和依赖图的常见问题。

一、从显式依赖开始

业务对象应通过构造参数声明需要的仓库、服务或时钟,而不是在内部自行创建数据库和网络客户端。构造注入能让依赖关系容易阅读,也便于在单元测试中直接传入替代实现。

接口和实现之间的映射应显式声明。第三方类型、需要额外配置的对象可由模块创建;普通业务类通常不需要为了注入而增加复杂工厂。

二、划分模块职责

绑定模块用于说明接口对应的实现,提供模块用于构造外部类型或带配置的对象。按职责拆分可以让对象来源容易追踪。不要将所有绑定堆进一个巨大模块,也不要为每个简单类创建单独模块。

网络客户端、数据库和序列化器等昂贵对象通常需要合理复用。对象的共享边界要与资源实际生命周期相符。

三、理解作用域

作用域决定对象在依赖图中的存活和复用时长。进程级服务通常应避免包含用户会话状态;页面或 ViewModel 状态不应意外延长到整个应用生命周期。

长生命周期对象依赖短生命周期对象时,常意味着边界设计不合理。反过来,短生命周期对象依赖稳定的应用服务通常可行。作用域不仅是性能选择,也会影响敏感状态的保留时间。

四、避免服务定位器

由 Android 或框架创建的组件可以使用框架支持的字段注入。普通业务对象优先通过构造参数接收依赖。不要在业务代码中到处从全局容器取对象,否则依赖关系会变得隐式。

依赖注入容器的职责是组装对象图,不应成为业务层的全局查询工具。

五、测试替换

纯业务类通常可在不启动注入框架的情况下测试。向构造函数传入假仓库、假时钟或内存数据源即可验证逻辑。关键绑定配置可用少量构建测试覆盖,不必让所有单元测试依赖完整应用组件。

测试替代实现应遵守同一接口契约。不要通过反射修改私有字段来注入假对象。

六、排查依赖图问题

缺少绑定时,沿着错误给出的依赖链查找未映射的接口。循环依赖通常表示职责边界不清,可以抽取更小的协调接口,而不是用延迟注入掩盖循环。

逐步迁移旧的手动创建方式,保持每一步都能编译,便于判断问题来自绑定配置还是架构变化。

七、常见问题

  1. 避免把带账户状态的对象放到全局作用域。
  2. 不要依赖注入来掩盖循环依赖。
  3. 只在需要共享时设置作用域。
  4. 对需要关闭的资源明确清理责任。
  5. 让测试能在不启动整套应用的情况下构造业务对象。

八、总结

依赖注入的价值来自显式依赖、清楚的生命周期和可替换的边界。优先采用构造注入,谨慎设置作用域,并让容器专注于组装对象图。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。