Contêiner de Injeção de Dependência para Kotlin: Koin vs Kodein vs Dagger

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Contêineres de Injeção de Dependência para Kotlin: visão geral completa e comparação

Injeção de Dependência (DI) é um padrão chave no desenvolvimento moderno, que permite criar aplicações com baixo acoplamento, testáveis e escaláveis. No ecossistema Kotlin, existem vários contêineres DI poderosos, cada um com suas características. Neste artigo, analisaremos detalhadamente as três soluções mais populares: Koin, Kodein-DI e Dagger/Hilt. Você aprenderá como funcionam, quais são seus pontos fortes e fracos, e qual ferramenta escolher para o seu projeto.



O que é um contêiner de Injeção de Dependência?

Um contêiner DI é um framework que gerencia a criação e o ciclo de vida dos objetos (dependências) e os injeta automaticamente nas classes. Em vez de criar dependências manualmente através de um construtor ou fábrica, você descreve as regras de montagem em módulos, e o contêiner cuida de todo o trabalho pesado. Isso é especialmente útil em projetos grandes com centenas de classes.



1. Koin — DI leve e simples para Kotlin

Koin é um contêiner DI orientado a DSL, escrito em Kotlin puro. Ele não requer geração de código, reflexão ou anotações. Todas as configurações são feitas através de uma DSL (Domain Specific Language) conveniente.



Instalação

// build.gradle.ktsimplementation("io.insert-koin:koin-core:3.5.3")


Exemplo de uso

// Definindo dependênciasval appModule = module {    single { HttpClient() }    factory { UserRepository(get()) }}

// Iniciando o Koinfun main() { startKoin { modules(appModule) } // Obtendo a dependência val repo: UserRepository by inject()}

class UserRepository(private val client: HttpClient)


Prós:

  • Curva de aprendizado mínima — sem anotações, sem geração de código
  • Fácil integração com Android (Koin Android)
  • Suporte a escopos (Scope API)
  • Compilação rápida


Contras:

  • Erros são detectados apenas em tempo de execução
  • Não há verificação do grafo de dependências em tempo de compilação
  • Um pouco mais lento que o Dagger em tempo de execução devido à reflexão


2. Kodein-DI — flexível e multiplataforma

Kodein-DI é outro framework DI em Kotlin puro. Ele oferece recursos avançados: suporte a projetos multiplataforma (KMP), inicialização tardia, marcação de dependências e fábricas integradas.



Exemplo de configuração

val di = DI {    bind<ApiService>() with singleton { RetrofitApiService() }    bind<Logger>() with provider { ConsoleLogger() }    bind<UserRepository>() with factory { UserRepositoryImpl(instance()) }}

// Usoclass MainActivity { private val repo: UserRepository by di.instance()}


Prós:

  • Suporte completo a Kotlin Multiplatform (iOS, JS, JVM)
  • Sistema poderoso de tags e modificadores
  • Possibilidade de criar contêineres aninhados
  • Suporte a escopos e segurança de thread


Contras:

  • Menos popular que o Koin (menos comunidade e tutoriais)
  • A DSL pode parecer sobrecarregada para projetos simples
  • Também verificação de dependências em tempo de execução


3. Dagger / Hilt — DI de alto desempenho do Google

Dagger e seu wrapper para Android Hilt são frameworks DI baseados em geração de código durante a compilação. Eles usam anotações (@Inject, @Module, @Component) e criam todo o código de ligação antecipadamente. Isso proporciona desempenho máximo em tempo de execução.



Exemplo com Hilt

@HiltAndroidAppclass MyApplication : Application()

@AndroidEntryPointclass MainActivity : AppCompatActivity() { @Inject latein

Recommendations