Complete Hilt Dependency Injection Guide
Master Hilt for managing dependencies across your Android app.
@HiltAndroidApp Entry Point
@HiltAndroidApp
class MyApplication : Application()
Module Definition
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Provides
@Singleton
fun provideUserRepository(
api: ApiService
): UserRepository = UserRepositoryImpl(api)
}
@Provides vs @Binds
// @Provides for complex instantiation
@Provides
fun provideApiService(): ApiService =
Retrofit.Builder()
.baseUrl(BASE_URL)
.build()
.create(ApiService::class.java)
// @Binds for interface to impl mapping
@Binds
fun bindRepository(
impl: UserRepositoryImpl
): UserRepository
Scope Annotations
- @singleton: App lifetime
- @ViewModelScoped: ViewModel lifetime
- @ActivityScoped: Activity lifetime
- @FragmentScoped: Fragment lifetime
@HiltViewModel
@HiltViewModel
class UserViewModel @Inject constructor(
private val repository: UserRepository
) : ViewModel() {
// ViewModel automatically injected
}
Test Module Replacement
@Module
@InstallIn(SingletonComponent::class)
object TestRepositoryModule {
@Provides
@Singleton
fun provideUserRepository(): UserRepository =
FakeUserRepository()
}
Setup Checklist
- Add Hilt dependencies
- Apply Hilt gradle plugin
- Create @HiltAndroidApp
- Define @Module with @InstallIn
- Inject via @Inject in constructors
- Use @HiltViewModel for ViewModels
8 Android app templates on Gumroad
Top comments (0)