Есть ли способ использовать Koin для инъекций с generic? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть базовый класс, и я хотел бы использовать инъекцию Коина в этом базовом классе, например:

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, но не для простой инъекции.Так есть ли способ использовать инъекцию Коина с универсальным типом?

1 Ответ

0 голосов
/ 10 октября 2018

Ну, я нашел только частично решение этого вопроса.Это использование презентатора как абстрактного 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()
     ...
}
...