我的团队在我们的Android应用程序中采用了Dagger进行依赖注入,我必须说我们喜欢它到目前为止。但是,我们希望确保我们有效地使用它。我想知道是否有人可以解释或者是否有任何文档解释Dagger为注入依赖关系而反思的情况?
答案 0 :(得分:9)
Dagger的后备逻辑嵌入在FailoverLoader类中。它曾经无法为给定模块加载ModuleAdapter时进行故障转移,但如果无法加载ModuleAdapter,则最新版本将失败并显示错误。
目前,如果Dagger找不到需要注入的给定类型的InjectAdapter类,它将进行故障转移。最常见的情况是,您有一个可注入类型的抽象父级,它没有@Inject字段。在这种情况下,不会为它创建InjectAdapter,因此当加载具体的可注入类型时,它会尝试查找父项的适配器,找不到它,并创建一个反射替代。
类似地,如果没有对使用@Inject字段或构造函数修饰的类运行代码生成,Dagger也会回退到那些反射。它与上面的继承案例的逻辑真的相同,只是继承是唯一不会因无法运行代码生成而导致的情况。
顺便说一句,位于http://github.com/google/dagger的Google fork目前生成的处理父类型的适配器没有查找父级的适配器(硬编码的父适配器),因此谷歌中不会发生这种故障转移叉子。我们还没有将google fork发布到maven,因为它直到最近才几乎完全相同,但如果父类中的故障转移逻辑存在问题,您可能希望提交问题并要求发布。