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()