android - 是否有关于 Dagger 在注入(inject)依赖项时何时回退到反射的文档?

标签 android dependency-injection dagger

我的团队已在我们的 Android 应用程序中采用 Dagger 进行依赖项注入(inject),我必须说到目前为止我们非常喜欢它。但是,我们要确保我们有效地使用它。我想知道是否有人可以解释或是否有任何文档解释 Dagger 回退到反射以注入(inject)依赖项的情况?

最佳答案

Dagger 的回退逻辑嵌入在其 FailoverLoader 类中。它曾经在无法为给定模块加载 ModuleAdapter 时进行故障转移,但如果无法加载 ModuleAdapter,最新版本将失败并显示错误。

目前,如果 Dagger 找不到需要注入(inject)的给定类型的 InjectAdapter 类,它将进行故障转移。最常见的情况是当您有一个可注入(inject)类型的抽象父级时,它没有 @Inject 字段。在这种情况下,不会为它创建任何 InjectAdapter,因此当加载具体的可注入(inject)类型时,它会尝试为父级查找适配器,但找不到,于是创建了一个反射替代。

同样,如果不对用 @Inject 字段或构造函数装饰的类运行代码生成,Dagger 也会回退到反射。这实际上与上述继承案例的逻辑相同,只是继承是唯一不是由运行代码生成失败引起的案例。

顺便说一句,Google 分支位于 http://github.com/google/dagger当前生成的适配器无需查找父级适配器(硬编码父级适配器)即可处理其父级类型,因此这种故障转移不会发生在 google fork 中。我们还没有发布 google fork 到 maven,因为直到最近它几乎完全相同,但如果父类中的故障转移逻辑是一个问题,您可能希望提交问题并请求发布。

关于android - 是否有关于 Dagger 在注入(inject)依赖项时何时回退到反射的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695062/

相关文章:

interface - 抽象类是否像接口(interface)一样与 StructureMap 一起使用?

rust - 尝试在 Rust 中进行控制反转时未实现 `Send`

java - Android Architecture Blueprints "todo‑mvp‑dagger",@Provides for TasksRepository 在哪里?

java - 在不访问应用程序的情况下获取 Dagger 组件

android - 有没有办法让广播组水平布局?

android - Android Studio 中的颜色预览

android - 我需要添加什么依赖项才能使用 com.google.android.material.slider.Slider

android - 设备所有者未在 Android M 上清除

C# 按实体类型自动创建存储库

java - Dagger2 如何基于java类进行注入(inject)?