使用Dagger 2的双向依赖性

时间:2018-07-31 13:39:31

标签: android kotlin dagger-2

我正在我的Android应用中尝试VIPER架构。我将Dagger 2.11用于DI。

我对每个VIPER模块的依赖性是:

  1. PresenterFragment通过ViewInputViewOutput接口链接。
  2. PresenterInteractor通过InteractorInputInteractorOutput接口链接。
  3. 我们对其他一些依赖项不感兴趣。

这是我的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接口将
  1. Fragment注入到ViewOutput
  2. 通过Interactor接口将
  3. Presenter注入到InteractorInput
  4. 由于Presenter类型(为了防止循环依赖性),
  5. Interactor注入Lazy中。
  6. Lazy.get() Presenter的第一次调用之后,通过Interactor接口注入到InteractorOutput中。

问题在于,在第1和第4步中,分别注入了{strong> {strong> )不同的Presenter实例。如何使匕首将相同的演示者注入FragmentInteractor中?

还是我需要以其他方式解决依赖关系周期?

1 个答案:

答案 0 :(得分:0)

@FragmentLevel范围添加到Presenter后,此问题已解决。