以前 SavedStateHandle を DI する方法について記事を書きましたが、今は正直以下の方法でも良いのではないかと思っています。
class MyViewModel(handle: SavedStateHandle) : ViewModel() {
@Inject
lateinit var myRepository: MyRepository
val myData: LiveData<MyData> = liveData {
emitSource(myRepository.getMyData())
}
}
class MyFragment : Fragment() {
private val viewModel by viewModels<MyViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(requireActivity().applicationContext as App)
.component
.inject(viewModel)
}
}
SavedStateHandle はデフォルトの ViewModelFactory におまかせして、それ以外のコンポーネントをフィールドインジェクションでセットする方法です。
テストはしていません。
以上です。