问题标签 [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.
android - 是否可以创建同一对象的不同实例并通过将参数传递给 Koin 中的 get() 函数来访问它们?
我正在使用 Koin 作为我的应用程序的 DI。我创建了一个模块:
如何创建具有不同参数集HttpClient
或Retrofit
具有不同实例化的不同实例?例如,在某些情况下,我可能需要OkHttpClient
使用它,AutheniticationInterceptor
而在另一些情况下,我的客户可能不需要使用它。
我可以在调用时传递一些参数,get()
以便获得不同的实例吗?任何建议都会受到重视。
android - 应用程序崩溃一次替换 Fragment for scoped ViewModel
漏洞
当我尝试打开片段然后用相同的片段替换时,我发现了一个问题。在我们的 prod 应用程序中,这是一个流行的案例。
重现行为的步骤:
- 一旦我点击可见的现有片段,我就有了 BottomNavigationView,超越了崩溃。
Koin 版本:2.0.1
模块
应用类
android - Koin 在模块之间共享实例
我正在将 Koin 库用于 Android 项目。我想在模块之间共享一些实例,因为它们在整个应用程序中被大量使用。例如:
正如我们从以下模块中看到的那样,两个模块之间的FirebaseFirestore.getInstance()
和LocalDatabase.getInstance(App.sContext)
是相同的。有没有一种方法可以声明让我们说一个moduleC
包含FirebaseFirestore.getInstance()
和的LocalDatabase.getInstance(App.sContext)
然后在 and 上调用moduleA
它moduleB
?
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.FactoryDefinitionInstance.get(FactoryDefinitionInstance.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.FactoryDefinitionInstance.get(FactoryDefinitionInstance.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.FactoryDefinitionInstance.get(FactoryDefinitionInstance.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.FactoryDefinitionInstance.get(FactoryDefinitionInstance.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.FactoryDefinitionInstance.get(FactoryDefinitionInstance.kt:37) 在 org.koin.core.definition.BeanDefinition。 resolveInstance(BeanDefinition.kt:70) 在 org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)
我无法理解如何使用 KOIN 解决这个问题。
PS:我是 koin DI 的新手。
android - Koin + Retrofit 在运行时添加标题
我在 MVVM 架构中有一个基于硬币和改造的项目。我想在注册此项目后使用“viewmodel”打印数据并在运行时将“token”的值添加到标题中。但我无法提供获取我保存在 SharedPreferences 中的令牌所需的上下文结构。我怎样才能以最干净的形式处理它?
应用模块
我的联系活动
kotlin - 如何在 Koin 中提供基类?
例如我下面的类:
现在,我想SpecificClass
通过koin
依赖注入提供,但我也想BaseClass
在同一个图中提供基类。
要清楚,我想做类似的事情:
我该如何做我的模块来做到这一点?如何将实现实例注入 baseClass 引用?
testing - KoinAppAlreadyStartedException:一个 Koin 应用程序已经启动
使用 koin-2.0.1 进行 Android 测试,尽管每个测试都单独通过,但无法同时测试所有 3 个测试。
运行类级别测试结果如下:
任何输入都会有所帮助,谢谢。
android - 使用 FusedLocationProviderClient 模拟和 Koin 进行依赖注入的单元测试
在我们的 Android 应用程序中,我们使用 Google Maps API 来显示用户位置。目前,我们正在使用 Koin 将 FusedLocationProviderClient 依赖项的参数化注入(它需要一个活动)提供到我们的 Fragment 类中。从理论上讲,这应该可以更直接地测试和模拟 Client 类(使用 mockk)。但是,在尝试使用 Android FragmentScenario 运行测试时,测试似乎在某处陷入无限循环(调试没有给出原因的答案)。有没有人对如何与我们正在使用的框架一起测试这个有任何进一步的想法。Android/Google 文档没有提供任何帮助,也没有提供数小时的网络搜索。
我们尝试在注入和不注入 FusedLocationProvideClient 的情况下进行测试。我们尝试在我们的测试类中启动 Koin 测试模块,使用活动进行参数化,而没有,似乎没有任何区别。FusedLocationProviderClient 被轻松设置为 true。
测试类:
片段类:
陷入无限循环