- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模块:
single{ (name: String) -> Person(name) }
当我这样做时:
val alice: Person by inject {parametersOf("Alice")}
val bob: Person by inject {parametersOf("Bob")}
我有 2 个 Alice 实例。除第一个参数外的所有参数都将被忽略。
有没有一种简单的方法可以让 Koin 将这 2 个视为不同的?参数是事先不知道的,所以我不能使用命名属性。 factory
也不会,我需要重用具有相同参数集的实例。
最佳答案
在 Koin 中没有这样的东西,但是很容易制作这样的东西。
1) 如果不存在则创建的类:
class DistinctFactory<K, V>(private val newInstance: (K) -> V) {
private val _locker = Any()
private val mRepo: HashMap<K, V> = HashMap()
operator fun get(id: K): V {
return mRepo[id] ?: run {
synchronized(_locker) {
mRepo[id] ?: run {
newInstance(id).also {
mRepo[id] = it
}
}
}
}
}
}
2)DistinctFactory的合币单:
single { DistinctFactory<String, Person> { Person(it) } }
3)使用前单的Koin factory:
factory { (name: String) -> get<DistinctFactory<String, Person>>()[name] }
测试:
val alice: Person by inject {parametersOf("Alice")}
val bob: Person by inject {parametersOf("Bob")}
val aliceAgain: Person by inject {parametersOf("Alice")}
alice === aliceAgain
关于Koin - 每个参数值的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943444/
我正在使用两个库,它们具有两个不同版本的 Koin 的依赖项。 其中一个图书馆有 org.koin:koin-android:2.0.1 另一个有 io.insert-koin:koin-core-j
我偶然发现了一个问题,我必须重新初始化我的 Retrofit API 类,因为 URL 发生了变化,所以我想告诉 Koin 重新初始化单个依赖项。我不想使用工厂,因为大多数时候它仍然是单例。 停止和启
收到消息错误 java.lang.RuntimeException: Unable to create application com.app.name.application.MainApplica
我最近删除了 jcenter()来自项目级构建 Gradle 的存储库。 从那时起,Koin(版本:2.2.2)开始给我下面的编译时错误:Could not find org.koin:koin-co
我有一个带有 MVVM 的简单 Android 项目,我正在使用 Koin。这些是我在 gradle 中的版本和依赖项: build.gradle // Koin implementation "or
我有一个模块: single{ (name: String) -> Person(name) } 当我这样做时: val alice: Person by inject {parametersOf("
我想知道如何使用 Koin 库正确地确定依赖关系的范围。 由于谷歌推荐 single Activity architecture AndroidX Navigation lib已成为通过轻松交换 Fr
我正在尝试使用 Koin 制作一个 Android 玩具项目。 我的项目有一个存储库和两个数据源(远程/缓存)。 以下是数据源: interface DataSource class CacheDat
我是测试新手,我将 Koin 改编为我的依赖注入(inject)。我的应用程序运行良好。它仍然具有登录功能。这是我的依赖类 模块.kt val applicationModule = module (
我的android项目中有两个模块,app模块和lib模块。 这两个模块都需要 Koin 进行 D.I.,所以我调用 startKoin在 MyApplication应用模块中的类和IninKoint
在我的 android 应用程序中,我有一个标记为 base 的模块。 base 中有几个类充当生命周期的基类(Controller、ViewModel 等)。我的应用程序在我的项目中与这些本地类一起
我对 Koin 和“androidTest”有疑问。因为 androidTest 启动了应用程序,所以我不需要在测试中自己启动 Koin。 现在我需要注入(inject)一个模拟服务。问题是,我在单例
我在 Android 项目中使用 Koin 作为我的 DI 框架,我想对我的模块进行单元测试。 例如:如果类 A 依赖于 B 和 C,请测试 B 和 C 是否包含在 Koin 图中,以及我是否将它们正
我正在我的 android 应用程序中实现 Koin DI。我成功地创建了一些模块。但是我遇到了一个异常,我试图从模块中的另一个获取对象。 这些是我的模块 val networkModule = mo
我有一个包含不同模块的应用程序,但项目正在增长,我们需要将项目拆分为不同的动态功能模块,因为用户(可能)不需要所有功能。我的问题是 Koin 需要从 Application 类启动应用程序将要加载的所
我正在开发一个新闻应用程序,我想在应用程序类中添加两个模块,但出现以下异常。 java.lang.RuntimeException: Unable to create application yodg
我有一个应用程序,每次用户登录时都会将用户数据保存在 SharedPref 中,但是当用户在前一个帐户注销后使用另一个帐户登录后,koin 仍然会获取以前的用户数据。 我已经检查了我的 createS
在构建基于 Kotlin 的 HTTP 服务器时,我正在尝试使用 Koin。 我正在使用一个框架,您可以在其中通过扩展一些框架提供的抽象类来编写您想要的行为,并在组件生命周期的各个点填写您的实现逻辑(
我是 KotlinPoet 的新手,我找不到如何创建以下 Koin 模块语句: internal val apiModules = module { single { get().create
我正在尝试使用 Koin 作为我的 D.I 来实现权限注入(inject) 但是,当我执行需要 PermissionRepository 的 ViewModel 时,我一直收到错误消息。 No def
我是一名优秀的程序员,十分优秀!