Dagger 2一个控制器,取决于两个范围的组件

时间:2016-11-14 09:45:59

标签: java android dependency-injection dagger-2 dagger

所以我将Dagger 2用于Android应用程序,但让我尝试在没有Android术语的情况下解释我的问题。

简单地说,我有一个显示UI的控制器。为了用适当的单位显示适当的值,该控制器需要依赖两个范围的组件,这是不可能的。

情况就是这样:我有

  
      
  • 一个控制器组件,范围为@Activity
  •   
  • 一个应用程序组件,范围为@Singleton
  •   
  • 一个DbComponent - 一个数据库组件,其范围是@Application,它依赖于ApplicationComponent。
  •   
  • One PreferencesComponent - 再次组件,使用@Application并依赖于ApplicationComponent。
  •   

ControllerComponent需要依赖于两个DbComponent,因此我的控制器可以获取必须显示的数据,并且在PreferencesComponent上显示相应的单位(摄氏度,华氏度,m / s,km / h等)。

实施我的图表的最佳方法是什么?

我看到了类似于我的问题,但他们没有帮助 - question 1question 2

1 个答案:

答案 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
}