如何从演示者与 Koin 注入交互器



我是Koin的新手。我已经设置了所有的东西并且正在工作。但是当我尝试同时注入交互器和演示器时,我遇到了一些问题。这不确定是否可能。

这是我的模块

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()
}
.
.
.

交互器类

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) }

你有一个循环依赖关系,这就是为什么它不起作用。

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

摆脱这种困境有多种方法。 我建议进行以下更改:VoucherImpl不应具有构造函数参数VoucherContract.Callback。这个回调应该是方法的参数

,如下所示:
class VoucherImpl : AbstractInteractor(){
fun listen(VoucherContract.Callback){...}
}

这样,依赖关系就变成了一种方式,您可以注入它们。

最新更新