Open2
Hilt

依存性注入
Roomの例
目的 : viewModelにRoomのdaoの依存性注入をしたい。
Module
- Hiltにバインディングを追加するために使用。
- Hiltにインスタンスの提供方法を指示。
-
@Module
,@InstallIn
アノテーションが付けられたクラス。 -
@InstallIn
- Moduleの依存関係がどこで使えるかを指定する。指定できるコンポーネント
- 今回の
SingletonComponent
の場合はアプリケーション全体。(アプリが動作している間、依存関係は生き続ける)
@Module
@InstallIn(SingletonComponent::class)
object DatabaseModule {
@Provides
@Singleton
fun provideDao(dataBase: AppDataBase): databaseDao {
return dataBase.databaseDao()
}
@Provides
fun provideDatabase(@ApplicationContext context: Context): AppDataBase {
return Room.databaseBuilder(
context = context,
klass = AppDataBase::class.java,
name = databaseName
).build()
}
}

viewModel(daoを扱いたいクラス)に注入する。
@HiltViewModel
- viewModelの依存関係を注入するアノテーション
@Inject constructor()
- 使いたい依存関係を指定
こうすることで、依存関係を注入できる
@HiltViewModel
class viewModel @Inject constructor(
private val dao: databaseDao
) : ViewModel()