我正在尝试从 2.1.6 -> 3.0.2 升级我的 koin 使用,并且在使用范围注入时遇到问题。
我有 MVP,其中 Activity/Fragment 是视图,我想在演示者中注入视图。
所以我有
module {
scope(named<MainActivity>()) {
scoped<View> { getSource() }
scoped<Presenter> {
MainPresenter(
view = get()
)
}
}
在 2.1.6 中,我曾经这样做过,一切都很好:
class MainActivity :
AppCompatActivity(),
MainContract.View {
private val presenter: MainContract.Presenter by currentScope.inject()
...
}
然后在 MainActivity 我现在有:
class MainActivity :
AppCompatActivity(),
MainContract.View,
AndroidScopeComponent {
override val scope : Scope by activityScope()
private val presenter: MainContract.Presenter by scope.inject()
...
}
和主持人:
class MainPresenter(
private val view: MainContract.View
){
...
}
但它无法获取源对象,我得到错误:
Instance creation error : could not create instance for [Single:'uk.co.sentinelweb.cuer.app.ui.main.MainContract$View',scope:q:'uk.co.sentinelweb.cuer.app.ui.main.MainActivity']: java.lang.IllegalStateException: Can't use Scope source for uk.co.sentinelweb.cuer.app.ui.main.MainContract$View - source is:null
(即,当它尝试创建演示者时,它找不到范围内的 MainActivity)
这是现有代码(使用 2.1.6) https://github.com/sentinelweb/cuer/blob/develop/app/src/main/java/uk/co/sentinelweb/cuer/app/ui/main/MainActivity .kt
我在这里有更多的重写工作吗?我正在努力在 koin 文档中找到一个范围注入的好例子,而且很多看起来都很旧。很多项目似乎没有使用范围。
因此,如果有人能告诉我这里出了什么问题,或者给我指出一个类似 id 的像样的例子,非常感谢!