JessYanCoding / MVPArms

⚔️ A common architecture for Android applications developing based on MVP, integrates many open source projects, to make your developing quicker and easier (一个整合了大量主流开源项目高度可配置化的 Android MVP 快速集成框架).
Apache License 2.0
10.29k stars 2.39k forks source link

Dagger 注入的常见问题 #189

Closed Sum41forever closed 6 years ago

Sum41forever commented 6 years ago

在研究 Arms 中注入多个通用 Persenter #181 的过程中,发现一些 Dagger 注入的常见问题,所以总结一下 如果下面没有你所遇到的问题,可以提出交流,也欢迎各位在这个 Issues 下面加入自己解决的,和 Dagger2 有关的问题


Dagger2 不生成 "Dagger_" 文件

  1. Clean 项目
  2. Rebuild 项目
  3. 更改依赖版本,同时删除 Gradle Caching。

bound multiple times

me.jessyan.mvparms.demo.mvp.contract.TestContract.View is bound multiple times
  1. Component 关联的(n 个或者 1 个)Module 中有重复的 Provider
  2. Component A 有dependencies 的 Component B,A关联的 Module A 中有 provider,component B 关联的 Module B 中也有 provider,且在 Component B 中暴露出来了(不暴露不影响)

    Types may only contain one @Inject constructor.

    一个类的构造函数只能有一个有 @inject


cannot be provided without an @Inject constructor or from an @Provides-annotated method

  1. 没有 provider 或者 inject

  2. 如果 Component 含有 dependencies 的 Component,可能没有向外面暴露需要的对象。 (特别是注入多个 Persenter 比如这个 Issues #22 )

    Error:(39, 10) 错误: me.jessyan.mvparms.demo.mvp.contract.UserContract.Model cannot be provided without an @Provides-annotated method.

    may not reference scoped bindings

    Dagger 要求依赖的 Component 和当前 Component 必须是不一样的 Scope,如果依赖的 Component 超过一个,他们的 Scope 还必须一样

  3. Component 的 dependencies 与 Component自身的 scope 不能相同,即组件之间的 scope 不同

  4. Singleton 的组件不能依赖其他 scope 的组件,只能其他 scope 的组件依赖 Singleton 的组件, 没有 scope 的不能依赖有 scope 的组件

  5. 一个 Component 不能同时有多个 scope(Subcomponent 除外)

    找不到语法的错误. 但就是报错

  6. @inject注入的对象的泛型没有指定 Dagger2 找不到符号的原因总结


JessYanCoding:Dagger 要求每个 Component 都必须提供当前类里面被 @inject 修饰的所有对象。 所以,如果一个类里面这个 @inject 被一个 Component 提供,另外一个 @inject 被另外一个 Component 提供是不行的,必须两个 Component 都能独立完成这两个 @inject 的注入,所以也间接的规定了一个类里面只能允许一个 Component 进行注入,想重用 Component 只能通过依赖 Component 或者 Subcomponent 的方式,这也进一步解释了依赖 Component 和 Subcomponent 的作用

JessYanCoding commented 6 years ago

https://github.com/JessYanCoding/MVPArms/wiki/Issues#1

lindexter commented 5 years ago

[Dagger/DependencyCycle] Found a dependency cycle Dagger的依赖注入出现重复注入

JessYanCoding commented 5 years ago

@DexterLin007 重复注入,是你自己依赖的问题,只有你自己处理。