Sobes.tech
Junior — Middle

How can dependencies be injected through the constructor in a ViewModel?

sobes.tech AI

Answer from AI

Dependency injection through the constructor in ViewModel in Android is usually implemented using the ViewModelProvider.Factory factory. This allows passing necessary dependencies (for example, repositories) into the ViewModel constructor.

Example:

class MyViewModel(private val repository: MyRepository) : ViewModel() {
    // ViewModel logic
}

class MyViewModelFactory(private val repository: MyRepository) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
            @Suppress("UNCHECKED_CAST")
            return MyViewModel(repository) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

// Usage in Activity or Fragment
val factory = MyViewModelFactory(myRepository)
val viewModel = ViewModelProvider(this, factory).get(MyViewModel::class.java)

This approach makes it easy to test the ViewModel by passing mock objects and supports the principle of dependency inversion.