Introdução ao Koin: o que é e para que serve
\n\nKoin é 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\nPara 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\nPrincipais 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
Instalação do Koin
\n\nO Koin é distribuído via Maven Central. Para adicioná-lo ao projeto, inclua as dependências no arquivo build.gradle.kts (ou build.gradle).
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\nPara 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\nImportante: As versões podem mudar. A versão atualizada pode ser verificada no repositório do Koin no GitHub.
\n\nInício rápido com Koin
\n\nVamos considerar um exemplo simples: temos um serviço UserService, que depende de UserRepository. Em vez de criar o repositório manualmente, usamos o Koin.
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\nPasso 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\nPasso 3: Iniciar o Koin
\n// No ponto de entrada da aplicação (main ou Application)\nfun main() {\n // Inicia o Koi Também na biblioteca
Prost para Rust: guia completo com exemplos
Geração de PDF em TypeScript: visão geral das bibliotecas e ferramentas