android - Dagger 2 внедряет несколько интерфейсов и класс реализации - PullRequest
1 голос
/ 06 февраля 2020

Итак, я хочу построить мультимодульный android проект и у меня возникли проблемы с внедрением интерфейса и реализации.

У меня есть два интерфейса для навигации между фрагментом

первый интерфейс

interface Fragment1Navigation {

    fun navigateToFragment1()
    fun navigateToFragment2()

}

второй интерфейс

interface Fragment2Navigation {

    fun navigateToFragment3()
    fun navigateToFragment4()

}

тогда у меня есть класс, который реализует эти два интерфейса

class Navigator: BaseNavigator(), Fragment1Navigation, Fragment2Navigation {

    override fun navigateToFragment1() {
        // some implementation
    }

    override fun navigateToFragment2() {
        // some implementation
    }

    override fun navigateToFragment3() {
        // some implementation
    }

    override fun navigateToFragment4() {
        // some implementation
    }


}

я хочу внедрить этот класс Navigator в моей функции mainActivity, чтобы связать мой Сначала navcontroller, а также я хочу внедрить интерфейс в другой фрагмент, и я создал класс модуля следующим образом Навигатор, как и в основной деятельности, но оказывается, что он предоставляет другой экземпляр, поэтому интерфейс во фрагменте приводит к тому, что навигатор отличается от mainacctivity

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете достичь этого двумя способами:

  • , используя @Binds вместо @Provides
  • , передавая объект Navigation() непосредственно constructor из NavigationModule

с использованием binds

class Navigator @Inject constructor(): BaseNavigator(), Fragment1Navigation, Fragment2Navigation { 

    // body
}

Module

@Module()
abstract class NavigationModule {

    @Binds
    abstract fun provideNavigator(navigator: Navigator): BaseNavigator

    @Binds
    abstract fun provideFragment1Navigation(navigator: Navigator): Fragment1Navigation 

    @Binds
    abstract fun provideFragment2Navigation(navigator: Navigator): Fragment2Navigation
}
...