Koin para Kotlin: guia completo com exemplos

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

Introdução ao Koin: o que é e para que serve

\n\n

Koin é um framework leve, poderoso e intuitivo para injeção de dependências (Dependency Injection, DI) em Kotlin. Ao contrário de soluções pesadas como Dagger ou Spring, o Koin não usa reflexão, anotações ou geração de código. Tudo é construído com construções DSL simples (Domain Specific Language), tornando o código limpo, legível e facilmente testável.

\n\n

Para que serve o Koin? No desenvolvimento moderno de aplicações complexas, gerenciar dependências entre classes é uma das tarefas principais. Sem DI, você criará objetos manualmente, o que leva a um código fortemente acoplado, dificultando testes e manutenção. O Koin resolve esses problemas fornecendo uma maneira simples de registrar, configurar e obter dependências.

\n\n

Principais vantagens do Koin:

\n
    \n
  • Leveza: Impacto mínimo no tamanho do APK e no tempo de compilação.
  • \n
  • Simplicidade: Não requer anotações, reflexão ou geração de código.
  • \n
  • Kotlin-first: Utiliza totalmente os recursos da linguagem (DSL, lambdas, corrotinas).
  • \n
  • Modularidade: Permite dividir dependências em módulos lógicos.
  • \n
  • Testabilidade: Facilidade para substituir dependências em testes.
  • \n
  • Suporte ao Android: Possui módulos especiais para Android (ViewModel, Fragment, Compose).
  • \n
\n\n

Instalação do Koin

\n\n

O Koin é distribuído via Maven Central. Para adicioná-lo ao projeto, inclua as dependências no arquivo build.gradle.kts (ou build.gradle).

\n\n

Para projeto Kotlin Multiplatform / JVM:

\n
// build.gradle.kts\ndependencies {\n    // Módulo principal do Koin\n    implementation("io.insert-koin:koin-core:3.5.6")\n    \n    // Para testes\n    testImplementation("io.insert-koin:koin-test:3.5.6")\n}
\n\n

Para projeto Android:

\n
// build.gradle.kts (módulo app)\ndependencies {\n    // Módulo principal\n    implementation("io.insert-koin:koin-android:3.5.6")\n    \n    // Para ViewModel\n    implementation("io.insert-koin:koin-androidx-viewmodel:3.5.6")\n    \n    // Para Jetpack Compose\n    implementation("io.insert-koin:koin-androidx-compose:3.5.6")\n    \n    // Para WorkManager\n    implementation("io.insert-koin:koin-androidx-workmanager:3.5.6")\n    \n    // Para testes\n    testImplementation("io.insert-koin:koin-test:3.5.6")\n    testImplementation("io.insert-koin:koin-test-junit5:3.5.6")\n}
\n\n

Importante: As versões podem mudar. A versão atualizada pode ser verificada no repositório do Koin no GitHub.

\n\n

Início rápido com Koin

\n\n

Vamos considerar um exemplo simples: temos um serviço UserService, que depende de UserRepository. Em vez de criar o repositório manualmente, usamos o Koin.

\n\n

Passo 1: Definir as classes

\n
// Repositório de usuários\nclass UserRepository {\n    fun getUsers(): List<String> = listOf("Alice", "Bob", "Charlie")\n}\n\n// Serviço que usa o repositório\nclass UserService(private val repository: UserRepository) {\n    fun printUsers() {\n        repository.getUsers().forEach { println(it) }\n    }\n}
\n\n

Passo 2: Criar o módulo Koin

\n
// Módulo — é um contêiner onde descrevemos como criar dependências\nval appModule = module {\n    // single — criará uma única instância para toda a aplicação (singleton)\n    single<UserRepository> { UserRepository() }\n    \n    // factory — criará uma nova instância a cada solicitação\n    factory { UserService(get()) } // get() — solicita a dependência UserRepository\n}
\n\n

Passo 3: Iniciar o Koin

\n
// No ponto de entrada da aplicação (main ou Application)\nfun main() {\n    // Inicia o Koi                    

Recommendations