匕首中的依赖性提供优先权

 sdfsfsd 发布于 2023-02-09 17:53

当您使用@Inject-annotated构造函数通知Dagger如何提供依赖项时,您可以稍后在模块中覆盖它吗?案例:我的生产代码使用带有带注释的构造函数的组件,我想在测试期间使用测试实现覆盖它.我的override = true模块会在测试期间成功覆盖生产实现吗?

或者更一般的问题,什么优先,模块或注释类?

1 个回答
  • @Provides方法总是特朗普@Inject构造函数和无参数构造函数(带字段注入.

    这很重要,因为@Provides方法接管创建类型的责任,并且包括作用域,因此在@Provides方法中手动构造的标记为@Singleton的类将不会作用域,除非@Provides方法是作用域的.

    请注意,您在测试的上下文中使用了"override"一词...在这种情况下,您不需要使用@Module(override = true)设置(尽管没有任何危害).它只是一个优先顺序,它解析(实际上)如下:

      @Module(overrides = true)@Provides方法

      @Module(覆盖= false)(默认)@Provides方法

      @Inject构造函数的Just In Time绑定

      对于无参数构造函数的Just In Time绑定,IF类具有@Inject字段.

    2023-02-09 17:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有