我有一个基础类,我想在这个基础类上使用Koin注入(inject),例如:
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()
}
}
我知道有注入(inject)解决方案viewModel,但没有简单注入(inject)。那么有什么方法可以将Koin注入(inject)与泛型一起使用?
最佳答案
好吧,我只找到了部分解决此问题的方法。它在基类中使用了类似于抽象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()
...
}