【问题标题】:Koin sharing instances between modulesKoin 在模块之间共享实例
【发布时间】:2019-06-23 04:34:30
【问题描述】:

我正在将 Koin 库用于 Android 项目。 我想在模块之间共享一些实例,因为它们在整个应用程序中被大量使用。 例如:

val moduleA = module {
    scope(named<FragmentA>()) {
        scoped { FirebaseFirestore.getInstance() }

        scoped { LocalDatabase.getInstance(App.sContext) }
        scoped { NetworkDataSourceA(get()) }    
    }
}

val moduleB = module {
        scope(named<FragmentB>()) {
            scoped { FirebaseFirestore.getInstance() }

            scoped { LocalDatabase.getInstance(App.sContext) }
            scoped { NetworkDataSourceB(get()) }    
        }
    }

从以下模块中我们可以看到,FirebaseFirestore.getInstance()LocalDatabase.getInstance(App.sContext) 在两个模块之间是相同的。 有没有办法让我声明一个包含FirebaseFirestore.getInstance()LocalDatabase.getInstance(App.sContext)moduleC,然后在moduleAmoduleB 上调用它?

【问题讨论】:

  • 是的,您可以通过创建和关闭范围来做到这一点。您能否添加 FragmentA 或 FragmentB 代码。以便我可以根据您的代码添加我的答案。

标签: android dependencies code-injection koin koin-scope


【解决方案1】:
  • 您可以通过创建范围来做到这一点。虽然我没试过。

    val moduleA = module {
    scope(named("CommonScope")) {
    
    scoped { FirebaseFirestore.getInstance() }
    scoped { LocalDatabase.getInstance(App.sContext) }
    
    scoped { NetworkDataSourceA(get()) }   
    scoped { NetworkDataSourceB(get()) }  
    
      }
    }
    
  • 现在,使用下面的行在 FragmentA 中创建您的范围。( 对于 NetworkDataSourceB 的 FragmentB 也一样)

    private val commonScope = getKoin().getOrCreateScope("scope1",named("CommonScope"))
    val networkDataSourceA = commonScope.get<NetworkDataSourceA>()
    
  • onDestroy方法中

    commonScope.close()
    

    更多详情请查看koin documentation(第 8 点)

【讨论】:

  • 有没有办法在moduleAmoduleB 中直接插入通用范围?
  • 不过,我没有找到那种方法。我也想要那个解决方案。
【解决方案2】:

根据 koin 文档,

默认情况下,如果在当前范围内没有找到定义,则所有范围回退到主范围内解析。

我建议将依赖项放在父范围内。

val appModule = module {
     single { FirebaseFirestore.getInstance() }
     single { LocalDatabase.getInstance(App.sContext)} 
}

并将此模块加载到您的 startKoin 中,以便在任何地方都可以使用它。

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多