所以我将Dagger 2用于Android应用程序,但让我尝试在没有Android术语的情况下解释我的问题。
简单地说,我有一个显示UI的控制器。为了用适当的单位显示适当的值,该控制器需要依赖两个范围的组件,这是不可能的。
情况就是这样:我有
- 一个控制器组件,范围为@Activity
- 一个应用程序组件,范围为@Singleton
- 一个DbComponent - 一个数据库组件,其范围是@Application,它依赖于ApplicationComponent。
- One PreferencesComponent - 再次组件,使用@Application并依赖于ApplicationComponent。
ControllerComponent需要依赖于两个DbComponent,因此我的控制器可以获取必须显示的数据,并且在PreferencesComponent上显示相应的单位(摄氏度,华氏度,m / s,km / h等)。
实施我的图表的最佳方法是什么?
我看到了类似于我的问题,但他们没有帮助 - question 1,question 2
答案 0 :(得分:3)
一个控制器组件,范围为@Activity
一个应用程序组件,使用@Singleton作为范围
一个DbComponent - 一个数据库组件,其范围是@Application,它依赖于ApplicationComponent。
一个PreferencesComponent - 再次组件,使用@Application确定范围并依赖于ApplicationComponent。
实际上,a component should exist per scope。
所以你应该有2个组件:
1。)ApplicationComponent
,标有@Singleton
@Singleton
@Component(modules={DbModule.class, PreferencesModule.class, AppModule.class})
public interface ApplicationComponent {
// provision methods
}
2。)ControllerComponent
,标有@Activity
@Activity
@Component(dependencies={ApplicationComponent.class}, modules={ControllerModule.class})
public interface ControllerComponent extends ApplicationComponent {
// provision methods
}