Marco Righini
04/30/2024, 4:25 PM@HiltAndroidApp
class LogApplication : Application() {
@Inject
internal lateinit var dependency: LoggerInMemoryDataSource
override fun onCreate() {
super.onCreate()
logout()
}
@Suppress("CAST_NEVER_SUCCEEDS")
private fun regenerateComponent() {
Log.d("", "Before: $dependency")
val cm = (this as GeneratedComponentManagerHolder).componentManager()
val f = ApplicationComponentManager::class.java.declaredFields.find { it.name == "component" }
f?.let {
it.isAccessible = true
f.set(cm, null)
}
((this as GeneratedComponentManager<ApplicationComponentManager>)
.generatedComponent() as LogApplication_GeneratedInjector)
.injectLogApplication(UnsafeCasts.unsafeCast(this))
Log.d("", "After: $dependency")
}
fun logout() {
regenerateComponent()
}
}
(LoggerInMemoryDataSource is a singleton and the reference is changing)
Do you foresee any drawback apart of the need of testing on every Hilt upgrade?
Should we propose to support this use case in Hilt?
Thanks!Hristijan
04/30/2024, 8:58 PMMarco Righini
05/01/2024, 4:37 PMMarco Righini
05/01/2024, 4:58 PM