2

我有基类,我想在这个基类上使用 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 注入呢?

4

1 回答 1

4

好吧,我只找到了这个问题的部分解决方案。它在基类中使用类似于抽象 val 的演示者。这将使在基类中使用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()
     ...
}
于 2018-10-09T22:44:52.733 回答