You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在Hilt的Module类中不应使用@Inject constructor?

为什么不建议在Hilt Module类中使用@Inject constructor

你写的代码能正常运行,但这么做既没必要,还会带来一些潜在问题,主要原因如下:

  • 违背Hilt Module的设计初衷:Hilt的Module本质是用来声明依赖提供规则的容器,Hilt框架会自行负责Module实例的创建与管理,完全不需要通过@Inject来注入它的实例。给Module加@Inject constructor属于画蛇添足——Module本身就是用来给其他类提供依赖的,它自己的构造逻辑不需要依赖注入来处理。

  • 存在循环依赖风险:如果后续你给Module的构造函数添加依赖参数(比如需要某个其他依赖来初始化Module),就会陷入逻辑矛盾:Module是用来提供依赖的,结果它自己又依赖其他可能需要它来提供的对象,很容易触发循环依赖问题,导致DI容器初始化失败。

  • 不符合社区约定,降低代码可读性:Android社区中,Hilt Module的标准写法是用object类(无状态场景)或者普通类(不带@Inject构造)。你这种写法会让其他维护代码的开发者困惑,额外增加理解成本,毕竟没人会默认Module需要被注入。

  • 带来不必要的初始化冗余:Hilt创建普通Module实例时可以直接通过无参构造初始化,而加了@Inject constructor后,会走依赖注入的构造流程,多了一层不必要的DI处理逻辑,虽然性能影响微乎其微,但完全没必要做这种冗余操作。

另外补充:如果你的Module没有需要维护的状态,用object类是更优的选择,不仅符合社区约定,还能避免额外的实例创建开销。

内容的提问来源于stack exchange,提问作者Cevdet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:37:01