如何使用 Koin 从演示者中注入交互器
How can inject interactor from presenter with Koin
我是 Koin 的新人。我已经设置了所有的东西并且正在工作。但是当我试图同时注入 interactor 和 presenter 时,我遇到了一些问题。不确定是否可能。
这是我的模块
val applicationModule = module(override = true) {
factory{VoucherImpl(get())}
factory<VoucherContract.Presenter> { (view: VoucherContract.View) -> VoucherPresenter(view, get()) }
}
这是我的 Activity 注入演示者的地方
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
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){...}
}
这样依赖就变成了一种方式,你可以注入它们。
我是 Koin 的新人。我已经设置了所有的东西并且正在工作。但是当我试图同时注入 interactor 和 presenter 时,我遇到了一些问题。不确定是否可能。
这是我的模块
val applicationModule = module(override = true) {
factory{VoucherImpl(get())}
factory<VoucherContract.Presenter> { (view: VoucherContract.View) -> VoucherPresenter(view, get()) }
}
这是我的 Activity 注入演示者的地方
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
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){...}
}
这样依赖就变成了一种方式,你可以注入它们。