我有一个基础类,我想在这个基础类上使用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()
     ...
}

10-08 19:11