如何动态更改依赖项?

How to dynamically change a dependency?

我有一个名为 CrmRepository 的接口,我从中实现了两个 类 SuiteCrmRepositoryOneCrmRepository,它们是我的应用程序的数据源。

我想在用户使用不同帐户登录时动态交换依赖项(数据源)。

我使用 Koin 将存储库注入构造函数中的视图模型:

class ModuleViewModel(private var crmRepo: CrmRepository) :ViewModel() {}

并像这样在 koin 中声明模块:

fun provideCrmRepository(
): CrmRepository {
    return if (crmType == CrmType.SUITE) {
        SuiteCrmRepository()
    } else if (crmType == CrmType.ONE){
        OneCrmRepository()
    }
}

single {
    provideCrmRepository()
}

问题是一旦创建了 ModuleViewModel,也会创建 CrmRepository 的单个实例,当创建新的 ModuleViewModel 时无法更改或再次创建但是在我更改了 crmType 变量之后。

您应该使用 factory 关键字而不是 single.

we declare our MySimplePresenter class as factory to have a create a new instance each time our Activity will need one.

通过使用单个关键字,Koin 提供相同的对象实例。

将行更改为;

factory {
   provideCrmRepository()
}

另一个解决方案可能是在 crmType 更改时卸载和加载模块。