Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匕首2一个控制器,取决于两个作用域组件_Java_Android_Dependency Injection_Dagger 2_Dagger - Fatal编程技术网

Java 匕首2一个控制器,取决于两个作用域组件

Java 匕首2一个控制器,取决于两个作用域组件,java,android,dependency-injection,dagger-2,dagger,Java,Android,Dependency Injection,Dagger 2,Dagger,因此,我将Dagger 2用于Android应用程序,但让我尝试在不使用Android术语的情况下解释我的问题 简单地说,我有一个显示UI的控制器。为了用适当的单位显示适当的值,该控制器需要依赖于两个作用域组件,这是不可能的 情况是这样的:我有 一个控制器组件,作用域为@Activity 一个应用程序组件,作用域为@Singleton 一个DbComponent—一个数据库组件,作用域为@Application,它依赖于ApplicationComponent 一个首选项组件-另一个组件,作用

因此,我将Dagger 2用于Android应用程序,但让我尝试在不使用Android术语的情况下解释我的问题

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

情况是这样的:我有

  • 一个控制器组件,作用域为@Activity
  • 一个应用程序组件,作用域为@Singleton
  • 一个DbComponent—一个数据库组件,作用域为@Application,它依赖于ApplicationComponent
  • 一个首选项组件-另一个组件,作用域为@Application并依赖于ApplicationComponent
ControllerComponent需要依赖于这两个DbComponent,以便我的控制器可以获得必须显示的数据,并依赖于首选项Component来显示适当的单位(摄氏度、华氏度、米/秒、公里/小时等)

实现我的图形的最佳方式是什么

我看到了一些问题,与我的问题类似,但它们没有帮助-

一个控制器组件,作用域为@Activity

一个应用程序组件,作用域为@Singleton

一个DbComponent—一个数据库组件,作用域为@Application,它依赖于ApplicationComponent

一个首选项组件-另一个组件,作用域为@Application并依赖于ApplicationComponent

实际上

因此,您应该有两个组件:

1.
ApplicationComponent
,标记为
@Singleton

@Singleton
@Component(modules={DbModule.class, PreferencesModule.class, AppModule.class})
public interface ApplicationComponent {
    // provision methods
}
2.
控制器组件
,标有
@活动

@Activity
@Component(dependencies={ApplicationComponent.class}, modules={ControllerModule.class})
public interface ControllerComponent extends ApplicationComponent {
    // provision methods
}

这些“组件”中的大多数应该是模块。这就是它不起作用的原因。阅读更多:您是在告诉我遵循某种“每个范围一个组件”模式还是其他模式?我认为这个问题部分是哲学性的。为什么(例如)一个DbComponent应该只是一个模块,而像networkcomponent这样的东西应该在一个单独的组件中,而不仅仅是另一个模块?网络组件也是单例范围的,不是吗?然后它应该是一个模块,是singleton组件的一部分。如果您看到这个答案,
NetworkingComponent
只是一个常规的
公共接口
,其中包含提供方法,而不是一个实际的组件。NetworkComponent是应用程序范围。我现在正在看这个答案,但我不确定我是否得到了正确答案。我是否正确理解,只要应用程序开启,并且必须是单例的,所有生命都应该在ControllerComponent和单例范围内?