【发布时间】:2015-08-21 22:29:23
【问题描述】:
我正在使用 Dagger 2 并且可以正常工作,但是我现在需要访问 Android 应用程序上下文。
我不清楚如何注入和访问上下文。我尝试按以下方式执行此操作:
@Module
public class MainActivityModule {
private final Context context;
MainActivityModule(Context context) {
this.context = context;
}
@Provides @Singleton
Context provideContext() {
return context;
}
}
但是这会导致以下异常:
java.lang.RuntimeException:无法创建应用程序:java.lang.IllegalStateException:必须设置 mainActivityModule
如果我检查 Dagger 生成的代码,这里会引发此异常:
public Graph build() {
if (mainActivityModule == null) {
throw new IllegalStateException("mainActivityModule must be set");
}
return new DaggerGraph(this);
}
我不确定这是否是注入上下文的正确方法 - 任何帮助将不胜感激。
【问题讨论】:
-
我不确定注入应用程序上下文是否有意义。您可以扩展应用程序类并创建应用程序的静态实例。你可以命名它,例如
BaseApplication。之后,您可以在扩展的 Application 类中创建get()方法,该方法将返回该实例并同时成为 Application Context。然后,您可以使用以下构造从项目中的任何位置访问应用程序上下文:BaseApplication.get()。您应该谨慎使用它,并且仅在必要时使用。
标签: android dependency-injection android-context dagger-2