Injeção de Dependências com Koin / Hilt no Android
Instruções Gerais:
- Resolva as atividades em ordem progressiva de maturidade.
- Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
- Consulte o gabarito comentado ao final de cada questão para autoavaliação.
🎯 Nível 1: Fundamentos
Problema 12.1 — Configuração de Módulos Koin com single e factory
Contexto: Configuração de Módulos Koin com single e factory no contexto de Injeção de Dependências com Koin / Hilt no Android.
Requisitos de Execução:
- Declarar módulo Koin injetando
Repositoriocomo singleton eUseCasecomo factory.
Resultado Esperado
Módulo de injeção Koin configurado de forma declarativa.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_1_SeuNome - Envie na tarefa:
Atividade Cap 12 - Injeção de Dependências com Koin / Hilt no Android
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.di
import org.koin.dsl.module
class RepositorioRemoto
class ConsultarExtratoUseCase(val repo: RepositorioRemoto)
val appModule = module {
single { RepositorioRemoto() }
factory { ConsultarExtratoUseCase(get()) }
}
🔍 Nível 2: Prática
Problema 12.2 — Injeção de ViewModel com koinViewModel() no Compose
Contexto: Injeção de ViewModel com koinViewModel() no Compose no contexto de Injeção de Dependências com Koin / Hilt no Android.
Requisitos de Execução:
- Injetar ViewModel diretamente no
@Composableutilizando a extensãokoinViewModel().
Resultado Esperado
ViewModel resolvido pelo container de DI sem acoplamento direto.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_2_SeuNome - Envie na tarefa:
Atividade Cap 12 - Injeção de Dependências com Koin / Hilt no Android
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.ui
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import org.koin.androidx.compose.koinViewModel
import com.empresa.mobile.viewmodel.ContadorViewModel
@Composable
fun TelaComKoin(viewModel: ContadorViewModel = koinViewModel()) {
Text("ViewModel injetado via Koin com ciclo de vida gerenciado.")
}
⚡ Nível 3: Integração
Problema 12.3 — Injeção de Dependências com Hilt (@HiltAndroidApp, @Inject)
Contexto: Injeção de Dependências com Hilt (@HiltAndroidApp, @Inject) no contexto de Injeção de Dependências com Koin / Hilt no Android.
Requisitos de Execução:
- Configurar classe
Applicationcom@HiltAndroidAppe injetar serviços no ViewModel com@HiltViewModel.
Resultado Esperado
Hilt configurado para geração estática de grafo de injeção em compilação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_3_SeuNome - Envie na tarefa:
Atividade Cap 12 - Injeção de Dependências com Koin / Hilt no Android
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.di
import android.app.Application
import androidx.lifecycle.ViewModel
import dagger.hilt.android.HiltAndroidApp
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltAndroidApp
class EmpresaMobileApp : Application()
@HiltViewModel
class PedidosViewModel @Inject constructor(
private val repo: RepositorioRemoto
) : ViewModel()
🏆 Nível 4: Desafio Corporativo
Problema 12.4 — Qualificadores e Ambientes Mock para Testes de Integração
Contexto: Qualificadores e Ambientes Mock para Testes de Integração no contexto de Injeção de Dependências com Koin / Hilt no Android.
Requisitos de Execução:
- Utilizar
@Namedou Qualifiers customizados para alternar entre serviço real e mock em tempo de teste.
Resultado Esperado
Grafo de dependências modularizado permitindo troca de implementações em testes.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_4_SeuNome - Envie na tarefa:
Atividade Cap 12 - Injeção de Dependências com Koin / Hilt no Android
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.di
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Named
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object RedeModule {
@Provides
@Singleton
@Named("ProdApi")
fun provideProdUrl(): String = "https://api.empresa.com"
@Provides
@Singleton
@Named("MockApi")
fun provideMockUrl(): String = "https://mock.empresa.com"
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |