我正在我的Android应用中尝试VIPER架构。我将Dagger 2.11用于DI。
我对每个VIPER模块的依赖性是:
Presenter
和Fragment
通过ViewInput
和ViewOutput
接口链接。Presenter
和Interactor
通过InteractorInput
和InteractorOutput
接口链接。这是我的Dagger模块的样子:
Module(includes = [Module.Declarations::class])
class Module(private val viewInput: ViewInput) {
@Module
interface Declarations {
@Binds
@FragmentLevel
fun bindViewOutput(viewOutput: Presenter): ViewOutput
@Binds
@FragmentLevel
fun bindInteractorOutput(interactorOutput: Presenter): InteractorOutput
@Binds
@FragmentLevel
fun bindInteractorInput(interactorInput: Interactor): InteractorInput
}
@Provides
@FragmentLevel
fun provideViewInput() = viewInput
}
现在,当我在inject
中呼叫Fragment
时,会发生以下情况:
Presenter
接口将Fragment
注入到ViewOutput
Interactor
接口将Presenter
注入到InteractorInput
Presenter
类型(为了防止循环依赖性),Interactor
被不注入Lazy
中。Lazy.get()
Presenter
的第一次调用之后,通过Interactor
接口注入到InteractorOutput
中。问题在于,在第1和第4步中,分别注入了{strong> {strong> )不同的Presenter
实例。如何使匕首将相同的演示者注入Fragment
和Interactor
中?
还是我需要以其他方式解决依赖关系周期?
答案 0 :(得分:0)
将@FragmentLevel
范围添加到Presenter
后,此问题已解决。