首页 > 解决方案 > Koin 是否可以通过类名获取实例?

问题描述

我在一个 Android 项目中有 2 个独立的模块。一个是应用程序,另一个包含常用功能。第二个模块对第一个模块一无所知

我想在第二个模块(通用函数)中获取在第一个模块中声明的类的实例。该类派生自第二个模块中声明的抽象类

我知道一个类的名称,但不知道类型。是否可以通过类名从 Koin 获取类的实例?

标签: koin

解决方案


val className = TripsRepository::class.getFullName()
val definition = getKoin()._scopeRegistry._rootScopeDefinition?.definitions?.firstOrNull { it.primaryType.getFullName() == className }
if(definition != null){
     val instance = getKoin().get(definition.primaryType) as AbstractNetworkRepository<CommonId>
}

对于最新的 Koin 版本

fun <T> Koin.getByClassName(className : String) : T? {
    val definition = this._scopeRegistry.rootScopeDefinition.definitions.firstOrNull { it.primaryType.getFullName() == className }
    if(definition != null){
        return this.get<T>(definition.primaryType)
    }
    return null
}

推荐阅读