我正在尝试使用 Dagger 并尝试设置 ObjectGraph。我创建了一个BaseModule
包含我的 SharedPreferences 和 Bus 之类的东西。我创建了一个WidgetModule
包含诸如 Picasso 之类的东西用于图像加载。
我正在尝试将毕加索注入我的一个适配器类。在适配器构造函数中,我得到我的 ObjectGraph 实例,然后注入适配器。我得到一个运行时异常抱怨:
Caused by: java.lang.IllegalArgumentException: No inject registered for members/<ParentClass>$1. You must explicitly add it to the 'injects' option in one of your modules.
这对我来说很奇怪,因为我没有在该课程中执行任何注射。 ParentClass
是我创建适配器的地方,但注入发生在适配器本身。我真的需要声明没有注入injects
注解的父类吗?这是我的适配器构造函数:
public MyAdapter(Context context, int textViewResourceId, List<Item> items) {
super(context, textViewResourceId, items);
MyApplication.get(getContext()).inject(this); //exception occurs here
}
这是我的模块:
@Module(
injects = {
MyApplication.class,
}
)
public final class BaseModule {
//...
}
@Module(
injects = MyAdapter.class
)
public class WidgetModule {
public WidgetModule(Application app) {
this.app = app;
}
@Provides
@Singleton
Picasso providePicasso() {
return new Picasso.Builder(app)
.build();
}
}
如您所见,我的适配器类在 my 中injects
,那么为什么要提到父类呢?
此外,这是创建 ObjectGraph 的正确结构吗?关于includes
and的文档addsTo
非常稀少,所有像 U2020 这样的演示项目都与它们的实际含义模棱两可。我正在尝试分离模块,以便在需要时可以轻松覆盖它们。
编辑:事实证明,即使我将父类添加到两个模块,我也会得到异常。这很奇怪。