koin - Koin 是否可以通过类名获取实例?
问题描述
我在一个 Android 项目中有 2 个独立的模块。一个是应用程序,另一个包含常用功能。第二个模块对第一个模块一无所知
我想在第二个模块(通用函数)中获取在第一个模块中声明的类的实例。该类派生自第二个模块中声明的抽象类
我知道一个类的名称,但不知道类型。是否可以通过类名从 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
}
推荐阅读
- docker - 是否可以将帧从 docker 容器重定向到wireshark?
- amazon-web-services - 如何在 python AWS CDK 中使用 s3 LifecycleRule tag_filters
- html - 如何使用 CSS 更改颜色
- ruby - Ruby 在另一个模块中包含错误模块 - 未初始化的常量错误
- java - 在 Hotspot JVM 中,为什么 CDS 需要 Compressed Oops?
- angular - 如何在用户管理 ABP 框架(FE Angular)中添加多个新动作?
- javascript - 单击时 HTML 按钮不会执行任何操作
- node.js - spawnSync 不返回“找不到命令”错误
- javascript - 如何检查绘制的墙是否正在接触玩家(画布)以进行碰撞?
- javascript - Javascript SetForm 通过 url 中的参数