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