K2: Add ability identify DI components by string key instead of KClass

It allows having several the same typed-component in the container
This commit is contained in:
Denis.Zharkov
2023-01-04 11:14:15 +01:00
committed by Space Team
parent 58c1b5dd1f
commit dab50daf56
4 changed files with 37 additions and 18 deletions
@@ -24,6 +24,10 @@ abstract class FirSession @PrivateSessionConstructor constructor(
return generateAccessor(T::class)
}
inline fun <reified T : FirSessionComponent> sessionComponentAccessor(id: String): ArrayMapAccessor<FirSessionComponent, FirSessionComponent, T> {
return generateAccessor(id)
}
inline fun <reified T : FirSessionComponent> nullableSessionComponentAccessor(): NullableArrayMapAccessor<FirSessionComponent, FirSessionComponent, T> {
return generateNullableAccessor(T::class)
}
@@ -38,6 +42,11 @@ abstract class FirSession @PrivateSessionConstructor constructor(
registerComponent(tClass, value)
}
@SessionConfiguration
fun register(keyQualifiedName: String, value: FirSessionComponent) {
registerComponent(keyQualifiedName, value)
}
override fun toString(): String {
val moduleData = nullableModuleData ?: return "Libraries session"
return "Source session for module ${moduleData.name}"