Wire Hilt dependency injection for this project. Use when adding a new repository, use-case, ViewModel, TextChunker, or PromptBuilder that needs injection. Covers @HiltViewModel, @Inject constructors, @Binds modules, and swapping FakeQuizGeneratorRepository via debug build-variant binding.
TextChunker, PromptBuilder)FakeQuizGeneratorRepository in debug builds or tests@HiltViewModel + @Inject constructor — never create them manually.@Inject constructor — never instantiate them with SomeClass().abstract @Module @InstallIn(…) classes using @Binds.@Singleton; ViewModel-scoped dependencies use @ViewModelScoped.TextChunker and PromptBuilder are interfaces — bind / .TextChunkerImplPromptBuilderImplApplication class must be annotated @HiltAndroidApp.class TextChunkerImpl @Inject constructor() : TextChunker {
override fun randomExcerpt(text: String, seed: Long): String { … }
}
Create or update data/di/DataModule.kt:
@Module
@InstallIn(SingletonComponent::class)
abstract class DataModule {
@Binds @Singleton
abstract fun bindTextChunker(impl: TextChunkerImpl): TextChunker
@Binds @Singleton
abstract fun bindPromptBuilder(impl: PromptBuilderImpl): PromptBuilder
@Binds @Singleton
abstract fun bindQuizGeneratorRepository(
impl: AiCoreQuizGeneratorRepository,
): QuizGeneratorRepository
}
@HiltViewModel
class QuizViewModel @Inject constructor(
private val repository: QuizGeneratorRepository,
) : ViewModel() { … }
In app/src/debug/java/…/di/DebugDataModule.kt:
@Module
@InstallIn(SingletonComponent::class)
abstract class DebugDataModule {
@Binds @Singleton
abstract fun bindQuizGeneratorRepository(
impl: FakeQuizGeneratorRepository,
): QuizGeneratorRepository
}
Exclude the release module from debug: annotate DataModule with
@Module(…) and declare separate source sets, or use replaces on the debug module.
@HiltAndroidApp
class QuizzerApplication : Application()
Register in AndroidManifest.xml:
<application android:name=".QuizzerApplication" … />
// build.gradle.kts (app) — prefer version catalog
implementation(libs.hilt.android)
ksp(libs.hilt.compiler)
// plugins block
alias(libs.plugins.hilt)
alias(libs.plugins.ksp)