我有一个基类,我想在这个基类上使用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注入与泛型一起使用?
答案 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()
...
}