gpt4 book ai didi

android - 在 MVP Koin 中注入(inject) Activity 对象

转载 作者:行者123 更新时间:2023-11-29 16:34:36 27 4
gpt4 key购买 nike

我正在使用 Koin 将 Activity 注入(inject) Presenter,但 Activity 的现有实例未传递给 Presenter。取而代之的是创建新的。我错过了什么?

val mainModule = module {
single<IStartupActivity> { StartupActivity() }
factory<IStartupPresenter> { StartupPresenter(get()) }
}

class StartupPresenter(val view: IStartupActivity): IStartupPresenter {
}

class StartupActivity : Activity(), IStartupActivity {
val presenter: IStartupPresenter by inject()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

I/KOIN: +-- 'inf.ecg.presenter.interfaces.IStartupPresenter'
D/KOIN: |-- [Factory [name='IStartupPresenter',class='inf.ecg.presenter.interfaces.IStartupPresenter']]
I/KOIN: | +-- 'inf.ecg.view.interfaces.IStartupActivity'
D/KOIN: | |-- [Single [name='IStartupActivity',class='inf.ecg.view.interfaces.IStartupActivity']]
D/KOIN: | |-- inf.ecg.view.implementations.StartupActivity@4176160
I/KOIN: | \-- (*) Created
D/KOIN: | !-- [inf.ecg.view.interfaces.IStartupActivity] resolved in 4.378594 ms
D/KOIN: |-- inf.ecg.presenter.implementations.StartupPresenter@ddfe619
I/KOIN: \-- (*) Created
D/KOIN: !-- [inf.ecg.presenter.interfaces.IStartupPresenter] resolved in 18.235835 ms

最佳答案

我知道这个问题已经被问过一段时间了,但这是为那些最终来到这里的人提供的解决方案。

这可以通过像这样将 Activity 声明为注入(inject)的参数来解决:

val myModule = module {
single<IStartupPresenter> { (view: IStartupActivity) -> StartupPresenter(view) }
}

然后将其注入(inject)到您的 Activity 中:

class StartupActivity : Activity(), IStartupActivity {
val presenter: IStartupPresenter by inject { parametersOf(this) }

...
}

关于 injecting parameters 的 Koin 文档.

关于android - 在 MVP Koin 中注入(inject) Activity 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com