在多模块应用程序中使用 koin

Dee*_*agi 1 android dependency-injection multi-module kotlin koin

您好,在多模块应用程序中,我正在使用 loadKoinModules() 加载子模块,并在功能模块中使用 unloadKoinModules() 卸载它,我的代码如下所示

class FeatureActivity:AppCompatActivity(){
    private val loadFeatures by lazy { loadKoinModules(featureModule) }
    private fun injectFeatures() = loadFeatures

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        injectFeatures()
    }

   override fun onDestroy() {
        super.onDestroy()
        unloadKoinModules(featureModule)
    }
} 
Run Code Online (Sandbox Code Playgroud)

一切正常,但当加载同一活动的另一个实例时,问题就开始了。当前活动处于后台。由于以下错误,应用程序崩溃

org.koin.error.BeanOverrideException:  Try to override definition with Factory
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这个错误

gme*_*tax 6

您正在做的事情在某种程度上是正确的,您可以在执行此操作时动态卸载,这就是unloadKoinModules添加链接的原因

但你为什么不卸载呢onStop?根据 android 生命周期和你想要做什么,你unload必须onStop

当活动获得焦点时onCreate会发生(并且您将加载模块),稍后当活动失去焦点时,onStop将会发生(并且您将卸载模块)以及事件之间的循环...

在此输入图像描述

class FeatureActivity:AppCompatActivity(){
    private val loadFeatures by lazy { loadKoinModules(featureModule) }
    private fun injectFeatures() = loadFeatures

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        injectFeatures()
    }

   override fun onStop() {
        super.onStop()
        unloadKoinModules(featureModule)
    }
} 
Run Code Online (Sandbox Code Playgroud)