O objetivo desse projeto é adicionar dagger 2 e, consequentemente, injeção de dependência a um aplicativo pré-existente.
A execução foi baseada nesse tutorial.
Os passos a seguir são os primeiros passos para habilitar o dagger 2 em sua aplicação.
-
Adicionar as dependências do Dagger 2 ao build.gradle
implementation 'com.google.dagger:dagger:$DAGGER_VERSION'
-
Criar um
Módulo da Aplicação
, responsável por prover as dependências as partes necessárias do app.
@Module
class AppModule(private val app: Application) {
@Provides
@Singleton
fun provideContext(): Context = app
}
- Criar um
Componente da Aplicação
, responsável por conectar os objetos e suas dependências
@Singleton
@Component(modules = [AppModule::class])
interface AppComponent
- Adicionar o
AppComponent
à aplicação
class MyApp : Application() {
lateinit var component: AppComponent
override fun onCreate() {
super.onCreate()
component = initDagger(this)
}
private fun initDagger(app: MyApp): AppComponent =
DaggerAppComponent.builder().appModule(AppModule(app)).build()
}
Os passos a seguir são os responsáveis pela injeção de uma classe qualquer após previamente configurar o dagger (descito no tópico anterior)
- Criar um
Método de injeção
no Componente da Aplicação com a classe a ser injetada como argumento
fun inject(target: MyClass)
- Adicionar um método anotado com
@Provides
no módulo para cada objeto a ser injetado
@Module
class MyClassModule {
@Singleton
@Provides
fun provideSomeClass(myClass: MyClass): ProvidedClass = ProvidedClassImp(myClass)
}
- Adicionar
@Inject
para cada membro injetado na classe target
@Inject lateinit var providedClass: ProvidedClass
- Inicializar a injeção na classe target
class MyClass : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(application as MyApp).component.inject(this)
}
}