output
Android Manual Dependency Injection and ViewModel Creation
Description
It is common to create quick projects to test or isolate a set of features. While most projects use some DI library, this might be overkill for a two-screen test app. So it is good to know how to create this patterns manually
ViewModel Creation
// Dependency Injection for a ViewModel
class MainActivity : ComponentActivity() {
private lateinit var viewModel: BiometricsViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val factory = BiometricsViewmodelFactory(tokenRepository)
viewModel = ViewModelProvider(this,factory)[BiometricsViewModel::class.java]
// access your viewmodel
}
}
class BiometricsViewmodelFactory(
private val repository: TokenRepository
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return when {
modelClass.isAssignableFrom(BiometricsViewModel::class.java) ->
BiometricsViewModel(repository) as T
else -> throw IllegalArgumentException("Unknown ViewModel class")
}
}
}
// Simple VM without dependencies
class MainActivity : ComponentActivity() {
private val viewModel: BiometricsViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ... access your viewmodel
}
}