Introdução à Injeção de Dependência e às bibliotecas Hilt/Dagger
\n\nNo desenvolvimento moderno de aplicativos em Kotlin (especialmente para Android), um dos conceitos arquitetônicos chave é a Injeção de Dependência (DI). Este é um padrão de projeto no qual um objeto recebe suas dependências de fora, em vez de criá-las por conta própria. Isso torna o código mais flexível, testável e sustentável.
\n\nDagger é um poderoso framework para DI, desenvolvido pelo Google, que gera código em tempo de compilação. Ele garante que todas as dependências sejam fornecidas corretamente e elimina erros de tempo de execução relacionados à falta de dependências. No entanto, o Dagger tem uma curva de aprendizado íngreme devido à sua complexidade.
\n\nHilt é uma camada sobre o Dagger, criada para simplificar seu uso em aplicativos Android. O Hilt fornece componentes padrão, anotações de escopo e integração automática com o ciclo de vida do Android (Activity, Fragment, ViewModel, etc.). Se você está programando em Kotlin para Android, o Hilt é a escolha recomendada, pois reduz significativamente o código boilerplate.
\n\nNeste artigo, abordaremos ambas as bibliotecas em detalhes, mas o foco principal será no Hilt, por ser a ferramenta mais moderna e conveniente. Você aprenderá como instalar o Hilt, como usar suas principais anotações e métodos, e também analisaremos exemplos reais e erros comuns.
\n\nInstalação do Hilt em um projeto Kotlin/Android
\n\nO Hilt não é instalado via pip ou npm. Ele é integrado ao projeto Gradle. Para Kotlin e Android, o processo é o seguinte:
\n\n1. Adicionar o plugin Hilt no build.gradle raiz (nível do Projeto)
\n// build.gradle (Project)\nbuildscript {\n repositories {\n google()\n mavenCentral()\n }\n dependencies {\n // ... outros plugins\n classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50' // Verifique a versão atual\n }\n}\n\n\n2. Aplicar o plugin no build.gradle do módulo do aplicativo (nível do Módulo)
\n// build.gradle (Module: app)\nplugins {\n id 'com.android.application'\n id 'org.jetbrains.kotlin.android'\n id 'kotlin-kapt' // Obrigatório para o Hilt\n id 'dagger.hilt.android.plugin'\n}\n\nandroid {\n // ... sua configuração\n}\n\ndependencies {\n implementation 'com.google.dagger:hilt-android:2.50'\n kapt 'com.google.dagger:hilt-compiler:2.50'\n\n // Para ViewModel (opcional, mas recomendado)\n implementation 'androidx.hilt:hilt-navigation-compose:1.1.0' // Para Jetpack Compose\n // ou\n implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' // Para versões antigas\n}\n\n\n3. Configurar a classe Application
\nTodo aplicativo que usa Hilt deve ter uma classe Application anotada com @HiltAndroidApp.
import android.app.Application\nimport dagger.hilt.android.HiltAndroidApp\n\n@HiltAndroidApp\nclass MyApplication : Application() {\n override fun onCreate() {\n super.onCreate()\n // Inicialização do aplicativo\n }\n}\n\nNão se esqueça de especificar esta classe no AndroidManifest.xml:
<application\n android:name=".MyApplication"\n ... >\n\n\nInício rápido com exemplo de código
\n\nVamos criar um exemplo simples: um aplicativo que cumprimenta o usuário, usando Hilt para injetar a dependência Greeter.
Passo 1: Crie a classe que será injetada
\nimport javax.inject.Inject\n\nclass Greeter @Inject constructor() {\n fun greet(name: String): String {\n return "Olá, $name!"\n }\n}\n\nA anotação @Inject no construtor informa ao Hilt como criar uma instância desta classe.
Passo 2: Injeção na Activity
\nimport android.os.Bundle\nimport android.widge