如何使用Dagger 2访问片段实例

问题描述 投票:0回答:1

使用AndroidSupportInjection.inject(this)注入片段时,如何访问模块中的片段实例?我正在尝试注入Androids NavController类,但我需要一个活动或片段的实例。我该怎么做?

android dependency-injection dagger-2
1个回答
0
投票

如果您正在使用ContributesAndroidInjector,则应该能够通过生成的子组件中包含的任何模块访问Fragment实例。

EG

@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)
    }
© www.soinside.com 2019 - 2024. All rights reserved.