← Back to garden 🤏

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
    }
}