Hilt を使って依存性(Repository)を注入する最小例
Activity から Repository を直接 new しない → テストしやすい設計
MyRepositoy.kt
interface MyRepository {
fun getMessage(): String
}
class MyRepositoryImpl : MyRepository {
override fun getMessage() = "Hello from Repository!"
}
AppModule.kt
package com.example.hiltsample
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
@Singleton
fun provideMyRepository(): MyRepository = MyRepositoryImpl()
}
MainActivity.kt
// MainActivity.kt
package com.example.hiltsample
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject lateinit var repository: MyRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
// DI された repository が使える
androidx.compose.material3.Text(text = repository.getMessage())
}
}
}
Activity が Repository に依存しない(疎結合)
FakeRepository に差し替えるだけで テストが簡単
Repository の作り方を 1 箇所にまとめられて 保守性が上がる