我不太确定如何用 dagger 2 解决这个问题。假设我们有ApplicationModule它提供给我们,ApplicationContext
那么我们有ApplicationComponent它只使用这个模块。然后在它之上,我们拥有ActivityModule并且ActivityComponent依赖于ApplicationComponent.
ActivityComponent构建就像
ApplicationComponent component = ((MyApplication) getApplication()).getComponent();
mComponent = Dagger_ActivityComponent.builder()
.applicationComponent(component)
.activityModule(new ActivityModule(this))
.build();
然后我注入我的活动:
mComponent.inject(this);
现在我可以使用在 my 中声明的所有内容ActivityModule,但是我无法访问ApplicationModule.
那么问题是如何实现呢?这样当我构建依赖于另一个组件的组件时,我仍然可以从第一个组件访问模块吗?
编辑
我想我已经找到了解决方案,在再次观看Jake 的 Devoxx 演讲后,我不得不错过这一点,无论我想从另一个组件模块中使用什么,我必须在该组件中提供,例如我想从ApplicationModule内部使用 ContextApplicationComponent我必须声明Context provideContext();并且它将可用。很酷:)