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