Inyectar en ViewModels
Use @HiltViewModel para una inyección limpia
Inyectar en ViewModels es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
Inyectar ViewModels con Hilt
Los ViewModels son especiales: el framework los instancia mediante una factoría. Hilt se integra con este mecanismo mediante la anotación @HiltViewModel.
Anotar el ViewModel
Marque el ViewModel con @HiltViewModel y anote su constructor con @Inject.
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Qué proporciona Hilt
Hilt busca cada parámetro del constructor en el grafo de dependencias. Siempre que UserRepository esté vinculado (mediante un módulo o inyección mediante el constructor), Hilt lo proporciona automáticamente.
Obtenerlo en Compose
Use hiltViewModel() dentro de un Composable para obtener un ViewModel proporcionado por Hilt.
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}El host debe ser un punto de entrada
Para que hiltViewModel() funcione, la Activity host debe estar anotada con @AndroidEntryPoint. Esto conecta Compose con el grafo de Hilt.
@AndroidEntryPoint
class MainActivity : ComponentActivity()Inyectar otras dependencias
Puede inyectar cualquier elemento del grafo: repositorios, casos de uso e incluso la base de datos Room proporcionada por un módulo.
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()Inyectar el contexto de la aplicación
¿Necesita un contexto? Inyecte el contexto de la aplicación cualificado con @ApplicationContext.
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt proporciona automáticamente SavedStateHandle, que transporta los argumentos de navegación y sobrevive a la finalización del proceso.
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}La conexión completa
De principio a fin: el módulo proporciona el repositorio → Hilt lo inyecta en el ViewModel → Compose obtiene el ViewModel mediante hiltViewModel(). No hay factorías manuales.
Sin código de factorías manuales
Sin Hilt, tendría que escribir una ViewModelProvider.Factory personalizada para cada ViewModel que necesitara argumentos en el constructor. @HiltViewModel elimina todo eso.
Integrar todo el recorrido
Ahora dispone de toda la pila moderna: ViewModel + estado consciente del ciclo de vida, persistencia con Room, corrutinas y Flow, todo conectado mediante DI de Hilt.
Comprobación rápida
Compruebe cuánto ha comprendido sobre la inyección de ViewModels.
Resumen
Ha aprendido lo siguiente:
- El constructor con
@HiltViewModel+@Injectpermite que Hilt construya ViewModels. - Obténgalos en Compose con
hiltViewModel()dentro de un host@AndroidEntryPoint. - Inyecte repositorios,
@ApplicationContextySavedStateHandle. - No se necesitan factorías manuales.
Aprende Kotlin con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 36
- Lecciones
- 152
Preguntas frecuentes
¿La lección «Inyectar en ViewModels» es gratis?
Sí — el texto completo de «Inyectar en ViewModels» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Inyectar en ViewModels»?
Use @HiltViewModel para una inyección limpia Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Inyectar en ViewModels»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- ¿Por qué usar inyección de dependencias?
- Configurar Hilt
- Módulos y proveedores
- Inyectar en ViewModels