Hilt - 如何注入 ViewModel 接口?

Ily*_*man 9 android kotlin dagger-hilt

根据 Hilt 教程,ViewModels 需要通过以下方式注入:

@HiltViewModel
class ExampleViewModel @Inject constructor(
  private val savedStateHandle: SavedStateHandle,
  private val repository: ExampleRepository
) : ViewModel() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是,就我而言,我想使用一个接口:

interface ExampleViewModel()

@HiltViewModel
class ExampleViewModelImp @Inject constructor(
  private val savedStateHandle: SavedStateHandle,
  private val repository: ExampleRepository
) : ExampleViewModel, ViewModel() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后我想通过接口注入它

@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
  private val exampleViewModel: ExampleViewModel by viewModels()
  ...
}
Run Code Online (Sandbox Code Playgroud)

如何使这项工作有效?

IR4*_*R42 6

viewModels需要ViewModel班级的孩子

val viewModel: ExampleViewModel by viewModels<ExampleViewModelImp>()
Run Code Online (Sandbox Code Playgroud)


Amj*_*reh -1

注入接口非常简单,你传递一个接口,但注入注入的是一个Impl。

@InstallIn(ViewModelComponent::class)
@Module
class DIModule {

@Provides
fun providesRepository(): YourRepository = YourRepositoryImpl()

}
Run Code Online (Sandbox Code Playgroud)