有什么方法可以将Koin注入与泛型一起使用吗?

时间:2018-10-09 11:00:42

标签: android kotlin koin

我有一个基类,我想在这个基类上使用Koin注入,例如:

abstract class BasePresenterFragment<T : BasePresenter> : BaseFragment() {

    lateinit var presenter: T by inject<T>() // here is problem

    override fun onStart() {
        super.onStart()
        presenter.subscribe()
    }

    override fun onStop() {
        super.onStop()
        presenter.unSubscribe()
    }
} 

我知道有一些注入viewModel的解决方案,但没有简单注入的解决方案。那么有什么方法可以将Koin注入与泛型一起使用?

1 个答案:

答案 0 :(得分:1)

嗯,对于这个问题,我只找到了部分解决方案。它在基类中使用了类似于抽象val的presenter。这将使得可以在基类中使用presenter的方法,但是我仍然应该在每个子类中使用inject()进行初始化。示例:

abstract class BasePresenterFragment<P : BasePresenter> : BaseFragment() {

    abstract val presenter: P

    override fun onStart() {
        super.onStart()
        presenter.subscribe()
    }

    override fun onStop() {
        super.onStop()
        presenter.unSubscribe()
    }
}

和子类:

class HomeFragment : BasePresenterFragment<HomeContract.Presenter>(), HomeContract.View {
     ...
     override val presenter: HomeContract.Presenter by inject()
     ...
}