dagger hiltを試す
背景
Daggerのサポートライブラリが出ていた。 以前から仕事等で使っており、依存性解決がビルド時に行われdagger起因のランタイムエラーが起こらないのが好みだったが、やはりわかりにくさが一番のネックだった。設定に追記はできるけど新しく書き直すのができない感じ。
課題
使いやすくなったとあるがどの程度使いやすくなったか、試してみる
参考
実装
詳しくは参考先に任せるとして、ViewModel Injectionが出来る最小の実装を示す。
buildscript { dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha' } } allprojects { repositories { maven { "https://androidx.dev/snapshots/builds/6550871/artifacts/repository/" } } }
apply plugin: 'dagger.hilt.android.plugin' apply plugin: 'kotlin-kapt' dependencies { implementation 'com.google.dagger:dagger:2.28' kapt 'com.google.dagger:dagger-compiler:2.28' implementation 'com.google.dagger:hilt-android:2.28-alpha' kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha' implementation 'androidx.hilt:hilt-common:1.0.0-SNAPSHOT' implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-SNAPSHOT' kapt 'androidx.hilt:hilt-compiler:1.0.0-SNAPSHOT' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0' }
@HiltAndroidApp class ImasRadioStationApplication : Application()
@Module @InstallIn(ApplicationComponent::class) class AppModule { @Provides fun provideString(): String { return "hogehoge" } }
class MainViewModel @ViewModelInject constructor( val text: String, @Assisted private val savedState: SavedStateHandle ) : ViewModel()
@AndroidEntryPoint class MainActivity : AppCompatActivity(R.layout.activity_main) { private val mainViewModel by viewModels<MainViewModel>() }
雑感
- めちゃくちゃ便利。今までよくわからなかったComponentが定義されており(ApplicationComponent等)、さらにボイラープレートもほぼannotationだけで良くなった
- 基本dagger好きだけどKoinのようなわかりやすさにだいぶ難があったので他人に進めたりプロダクトに入れづらかったけど、このくらい楽に扱いやすいならおすすめしたいくらい
- 早くstableほしいです