gpt4 book ai didi

dependency-injection - Dagger 中的依赖项优先级

转载 作者:行者123 更新时间:2023-12-05 00:27:27 25 4
gpt4 key购买 nike

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

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

最佳答案

@Provides 方法总是胜过 @Inject 构造函数和无参数构造函数(使用字段注入(inject)。

这很重要,因为 @Provides 方法负责创建类型,并且包括范围,因此在 @Provides 方法中手动构建的标记为 @Singleton 的类将不会被限定范围,除非 @Provides 方法被限定范围.

请注意,您在测试的上下文中使用了“覆盖”一词……在这种情况下,您不需要使用 @Module(override=true) 设置(尽管没有害处)。这只是一个优先顺序,其解析(实际上)如下:

  • @Module(overrides=true) @Provides 方法
  • @Module(overrides=false) (默认) @Provides 方法
  • @Inject 构造函数的即时绑定(bind)
  • 无参数构造函数的即时绑定(bind),IF 类具有 @Inject 字段。
  • 关于dependency-injection - Dagger 中的依赖项优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com