今更ながらDagger Hiltを触りました。
DIの経験はDagger2とKoinを触ったことがあります。
最近はもっぱらKoinでした。
体系的に学ぶなら公式のドキュメントを読むのが最良ですが、公式ドキュメントがちょいちょい古いところがあるので、自分用にまとめます。
依存関係
プロジェクトレベルのbuild.gradleに下記を追記します。
buildscript { ... dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.31.2-alpha' ... } }
続いてアプリレベルのbuild.gradleに下記を追記します。
plugins { id 'dagger.hilt.android.plugin' } android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { // ktx implementation 'androidx.core:core-ktx:1.5.0' // dagger hilt implementation 'com.google.dagger:hilt-android:2.31.2-alpha' kapt 'com.google.dagger:hilt-android-compiler:2.31.2-alpha' }
アプリケーションクラスの作成
Application
クラスを作成します。@HiltAndroidApp
をつけることで依存関係が提供されます。
@HiltAndroidApp class MainApplication: Application()
Application
クラスを作成したらManifestファイルへの設定も忘れないようにしましょう。
<application ... android:name=".MainApplication" ...
ViewModelの作成
提供したいViewModel
を作成して@HiltViewModel
をつけます。
@HiltViewModel class MainViewModel @Inject constructor(): ViewModel()
依存関係の注入
依存関係を注入したいクラスに@AndroidEntryPoint
をつけることで提供されているクラスを受け取ることができます。
@AndroidEntryPoint class MainActivity : AppCompatActivity() { ... private val viewModel: MainViewModel by viewModels() ...
private val viewModel: MainViewModel by viewModels()
は ktxにより注入を簡略化してします。
まとめ
これだけでDIできます。
Dagger2に比べるとすごく簡単です。学習コストが大分低くなりましたね。
Koinと比べると元がDaggerなのでビルド時にエラーを吐いてくれるためアプリが起動する前に間違いに気づけます。処理スピードも多分早いんじゃないかなと。