Как получить доступ к экземпляру фрагмента с помощью Dagger 2 - PullRequest
0 голосов
/ 10 сентября 2018

При внедрении во фрагмент с использованием AndroidSupportInjection.inject(this), как мне получить доступ к этому экземпляру фрагмента в модуле? Я пытаюсь внедрить класс NavController для Android, но мне нужен экземпляр действия или фрагмента. Как бы я пошел по этому поводу?

1 Ответ

0 голосов
/ 10 сентября 2018

Если вы используете ContributesAndroidInjector, вы сможете получить доступ к экземпляру Fragment через любые модули, включенные в сгенерированный подкомпонент.

например.

@Module
abstract class MyContributesModule {
    @ContributesAndroidInjector(modules = [MyFragmentModule::class])
    internal abstract fun myFragment(): MyFragment
}

@Module
abstract class MyFragmentModule {
    @Binds
    internal abstract fun myFragmentInteractor(myFragmentInteractorImpl: MyFragmentInteractorImpl): MyFragmentInteractor
}

interface MyFragmentInteractor {
    fun doSomething()
}

class MyFragmentInteractorImpl @Inject constructor(private val myFragment : MyFragment) : MyFragmentInteractor {
    override fun doSomething() {
        // doSomething with myFragment
    }
}

class MyFragment : Fragment() {

    @Inject
    lateinit var interactor: MyFragmentInteractor

    override fun onAttach(context: Context?) {
        AndroidSupportInjection.inject(this)
        super.onAttach(context)
    }
...