在这个类中,我应该使用哪种@Override方法,以及在片段中添加依赖项的代码是什么?
在片段中调用注入的正确位置是 。这在Dagger 2用户指南的“注入位置”部分中进行了说明onAttach(Context context)
@Override
public void onAttach(Context context) {
((AppController) context.getApplicationContext()).getNetComponent().inject(this);
super.onAttach(context);
}
在服务中调用注入的正确位置是onCreate()
@Override
public void onCreate() {
((AppController) getApplication()).getNetComponent().inject(this);
super.onCreate();
}
请注意,在这两种情况下,注入请求都出现在调用 之前。Dagger用户指南是这样解释的:super.onCreate()
在活动中调用 super.onCreate() 之前调用 AndroidInjection.inject() 至关重要,因为在配置更改期间调用 super 会从上一个活动实例中附加 Fragments,而这反过来又会注入 Fragments。为了使片段注入成功,必须已经注入活动。对于 ErrorProne 的用户来说,在 super.onCreate() 之后调用 AndroidInjection.inject() 是一个编译器错误。
换句话说:
- 活动调用重新附加上一个实例中的片段
super.onCreate()
- 此调用会导致碎片被重新注入(因为碎片被注入
super
onAttach
)
- 片段应该在注入其活动后注入,因此在调用 之前请求注入您的活动。
super.onCreate()
您始终可以通过查看类(如 和 )的相关源代码来检查要注入的位置。在此处查看 GitHub 存储库com.google.dagger:dagger-android
DaggerFragment
DaggerService
对于您的具体示例,请确保您已将新的注入站点添加到 NetComponent:
void inject(FragmentBrandList frag);
void inject(BrandListService service);