Как можно внедрить интерактор от ведущего с помощью Коина - PullRequest
0 голосов
/ 14 июня 2019

Я новичок в Коине.Я установил все вещи и работает.Но у меня возникают некоторые проблемы, когда я пытаюсь внедрить интерактор и докладчика одновременно.Это не уверен, что это возможно.

Это мой модуль

val applicationModule = module(override = true) {
    factory{VoucherImpl(get())}
    factory<VoucherContract.Presenter> { (view: VoucherContract.View) -> VoucherPresenter(view, get()) }


}

Это моя деятельность, в которой вводить докладчик

 private val presenter: VoucherContract.Presenter by inject { parametersOf(this)}

Это мой докладчик

class VoucherPresenter (private var view: VoucherContract.View?, private var mCodeRechargeInteract : VoucherImpl) : VoucherContract.Presenter, VoucherContract.Callback, KoinComponent {

    override fun create() {
        view?.initView()
        view?.showProgress()
        mCodeRechargeInteract.run()
    }
.
.
.

Interactorкласс

class VoucherImpl(private var mCallback: VoucherContract.Callback?) : AbstractInteractor() {
.
.
.

контракт

interface VoucherContract {


    interface Presenter {
        fun create()
        fun destroy()
        fun checkIfShoppingCartHaveItems()
        fun addVoucherToShoppingCart(voucherProduct: Product)
        fun onItemClick(product: Product)
    }

    interface Callback {
        fun onResponseVouchers(vouchers: List<Product>?)
        fun onError()
    }

}

С этим кодом я получаю

No definition found for 'xxx.voucher.VoucherContract$Callback' has been found. Check your module definitions.

Затем я пытаюсь вставить его в модуль и не могу сделатьэто потому, что я получаю: несоответствие типов.Требуется VoucherContract.Callback Найдено VoucherImpl

factory<VoucherContract.Callback> { (callBack: VoucherContract.Callback) -> VoucherImpl(callBack) }

1 Ответ

1 голос
/ 14 июня 2019

У вас круговая зависимость, поэтому это не работает.

VoucherImpl(VoucherContract.Callback) и VoucherPresenter(View, VoucherImpl):VoucherContract.Callback

Существует несколько путей выхода из этого затруднительного положения.Я бы порекомендовал следующие изменения: VoucherImpl не должен иметь параметр конструктора VoucherContract.Callback.Этот обратный вызов должен быть параметром метода примерно так:

class VoucherImpl : AbstractInteractor(){
  fun listen(VoucherContract.Callback){...}
}

Таким образом, зависимость становится односторонней, и вы можете внедрить их.

...