Dependency injection Dagger中的依赖项提供顺序

Dependency injection Dagger中的依赖项提供顺序,dependency-injection,dagger,Dependency Injection,Dagger,当您使用@Inject带注释的构造函数来通知Dagger如何提供依赖项时,您以后能在模块中重写它吗?案例:我的生产代码使用带有注释构造函数的组件,我希望在测试期间用测试实现覆盖它。my override=true模块是否会在测试期间成功覆盖生产实现 还是更一般的问题,什么优先,模块还是带注释的类? @提供的方法总是胜过@Inject构造函数,而不提供args构造函数(使用字段注入) 这一点很重要,因为@Providers方法将接管创建类型的责任,这包括作用域,因此在@Providers方法中手

当您使用@Inject带注释的构造函数来通知Dagger如何提供依赖项时,您以后能在模块中重写它吗?案例:我的生产代码使用带有注释构造函数的组件,我希望在测试期间用测试实现覆盖它。my override=true模块是否会在测试期间成功覆盖生产实现


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

@提供的方法总是胜过@Inject构造函数,而不提供args构造函数(使用字段注入)

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

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

  • @模块(overrides=true)@提供方法
  • @模块(overrides=false)(默认)@提供方法
  • @Inject构造函数的即时绑定
  • 如果类具有@Inject字段,则无参数构造函数的即时绑定

  • 要明确的是,即使没有声明“overrides=true”,也会发生这种情况在模块上,对吗?是的-我会澄清一点。我会将此作为dagger站点中提供的文档的一部分添加。是的-我需要做一个可靠的文档更新,尽管我们正在处理2.0的内容,我想我们最终会得到一个更好的文档化API,有更多清晰的示例。无论如何,我们会在项目中表示这一点反恐精英。