问题标签 [koin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8368 浏览

android - 是否可以创建同一对象的不同实例并通过将参数传递给 Koin 中的 get() 函数来访问它们?

我正在使用 Koin 作为我的应用程序的 DI。我创建了一个模块:

如何创建具有不同参数集HttpClientRetrofit具有不同实例化的不同实例?例如,在某些情况下,我可能需要OkHttpClient使用它,AutheniticationInterceptor而在另一些情况下,我的客户可能不需要使用它。

我可以在调用时传递一些参数,get()以便获得不同的实例吗?任何建议都会受到重视。

0 投票
2 回答
1201 浏览

android - 应用程序崩溃一次替换 Fragment for scoped ViewModel

漏洞

当我尝试打开片段然后用相同的片段替换时,我发现了一个问题。在我们的 prod 应用程序中,这是一个流行的案例。

重现行为的步骤:

  • 一旦我点击可见的现有片段,我就有了 BottomNavigationView,超越了崩溃。

Koin 版本:2.0.1

模块

应用类

0 投票
2 回答
759 浏览

android - Koin 在模块之间共享实例

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

正如我们从以下模块中看到的那样,两个模块之间的FirebaseFirestore.getInstance()LocalDatabase.getInstance(App.sContext)是相同的。有没有一种方法可以声明让我们说一个moduleC包含FirebaseFirestore.getInstance()和的LocalDatabase.getInstance(App.sContext)然后在 and 上调用moduleAmoduleB

0 投票
2 回答
7163 浏览

android - 如何使用 koin 注入 View 模型?(针对特定用例)

我有一个用于活动的共享视图模型,它是片段。

从活动实例化时,我的视图模型需要传递的参数(onCreate仅一次)

但是从片段中我不需要传递参数,因为我确信我已经传递了一次参数。

Koin我尝试在下面做。

在活动中:

在片段中:

应用程序因以下错误而崩溃:

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.andor.navigate.notepad/com.andor.navigate.notepad.listing.NotesActivity}:org.koin.core.error.InstanceCreationException:无法为 [类型创建实例:Factory,primary_type:'com.andor.navigate.notepad.core.NoteViewModel'] 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os。 Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang。reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)作者:org.koin.core.error.InstanceCreationException:无法在 org.koin.core.instance.DefinitionInstance.create 为 [type:Factory,primary_type:'com.andor.navigate.notepad.core.NoteViewModel'] 创建实例(DefinitionInstance.kt:61) 在 org.koin.core.instance.FactoryDe​​finitionInstance.get(FactoryDe​​finitionInstance.kt:37) 在 org.koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70) 在 org.koin。 core.scope.Scope.resolveInstance(Scope.kt:165)886)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:org.koin.core.error.InstanceCreationException:无法为 [type:Factory,primary_type:'com.andor 创建实例.navigate.notepad.core.NoteViewModel'] 在 org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61) 在 org.koin.core.instance.FactoryDe​​finitionInstance.get(FactoryDe​​finitionInstance.kt:37) 在 org .koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70) at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)886)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:org.koin.core.error.InstanceCreationException:无法为 [type:Factory,primary_type:'com.andor 创建实例.navigate.notepad.core.NoteViewModel'] 在 org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61) 在 org.koin.core.instance.FactoryDe​​finitionInstance.get(FactoryDe​​finitionInstance.kt:37) 在 org .koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70) at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)] 在 org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61) 在 org.koin.core.instance.FactoryDe​​finitionInstance.get(FactoryDe​​finitionInstance.kt:37) 在 org.koin.core.definition.BeanDefinition。 resolveInstance(BeanDefinition.kt:70) 在 org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)] 在 org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61) 在 org.koin.core.instance.FactoryDe​​finitionInstance.get(FactoryDe​​finitionInstance.kt:37) 在 org.koin.core.definition.BeanDefinition。 resolveInstance(BeanDefinition.kt:70) 在 org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)

我无法理解如何使用 KOIN 解决这个问题。

PS:我是 koin DI 的新手。

0 投票
1 回答
2343 浏览

android - Koin + Retrofit 在运行时添加标题

我在 MVVM 架构中有一个基于硬币和改造的项目。我想在注册此项目后使用“viewmodel”打印数据并在运行时将“token”的值添加到标题中。但我无法提供获取我保存在 SharedPreferences 中的令牌所需的上下文结构。我怎样才能以最干净的形式处理它?

应用模块

我的联系活动

0 投票
2 回答
1660 浏览

kotlin - 如何在 Koin 中提供基类?

例如我下面的类:

现在,我想SpecificClass通过koin依赖注入提供,但我也想BaseClass在同一个图中提供基类。

要清楚,我想做类似的事情:

我该如何做我的模块来做到这一点?如何将实现实例注入 baseClass 引用?

0 投票
2 回答
2085 浏览

android - 清除 sharedViewModel

我正在使用 Koin 将 viewModel 注入片段。我的应用程序是单一活动。我只需要在 servisFragment 和 partFragment 中使用 sharedViewModel。我想在标记为红色的导航后从 Activity 中清除该 viewModel。

我怎样才能做到这一点?

导航

注入viewModel的代码

Koin sharedViewModel

感谢您的任何帮助。

0 投票
2 回答
1508 浏览

android - Koin Android:注入存储库时出现org.koin.error.NoBeanDefFoundException

我用 koin 为 DI 制作了 mvvm 模式的项目,但我总是没有找到定义存储库

我已经在视图模型之前在模块应用程序中定义了存储库,但是我得到了一些错误

摇篮应用

模块

定义模块

在应用程序中

存储库类

应用远程数据

这里错误信息

在此处输入图像描述

0 投票
5 回答
7200 浏览

testing - KoinAppAlreadyStartedException:一个 Koin 应用程序已经启动

使用 koin-2.0.1 进行 Android 测试,尽管每个测试都单独通过,但无法同时测试所有 3 个测试。

运行类级别测试结果如下:

任何输入都会有所帮助,谢谢。

0 投票
0 回答
813 浏览

android - 使用 FusedLocationProviderClient 模拟和 Koin 进行依赖注入的单元测试

在我们的 Android 应用程序中,我们使用 Google Maps API 来显示用户位置。目前,我们正在使用 Koin 将 FusedLocationProviderClient 依赖项的参数化注入(它需要一个活动)提供到我们的 Fragment 类中。从理论上讲,这应该可以更直接地测试和模拟 Client 类(使用 mockk)。但是,在尝试使用 Android FragmentScenario 运行测试时,测试似乎在某处陷入无限循环(调试没有给出原因的答案)。有没有人对如何与我们正在使用的框架一起测试这个有任何进一步的想法。Android/Google 文档没有提供任何帮助,也没有提供数小时的网络搜索。

我们尝试在注入和不注入 FusedLocationProvideClient 的情况下进行测试。我们尝试在我们的测试类中启动 Koin 测试模块,使用活动进行参数化,而没有,似乎没有任何区别。FusedLocationProviderClient 被轻松设置为 true。

测试类:

片段类:

陷入无限循环