Práctica de dagger - parte I

Dependencias

En archivo build.gradle

plugins {
    ...
    id 'org.jetbrains.kotlin.kapt'
}

implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"

Actualización de subclase Application.kt

    val appComponent: AppComponent by lazy {
        initializeComponent()
    }

    private fun initializeComponent(): AppComponent = DaggerAppComponent
        .factory()
        .create(applicationContext)

Creación de alcance personalizado

@Scope
@MustBeDocumented
@Retention(value = AnnotationRetention.RUNTIME)
annotation class ActivityScope

Creación de componente

@ActivityScope
@Component()
interface MainComponent {}

Método para creación de componente

    @Component.Factory
    interface Factory {
        fun create(appComponent: AppComponent): MainComponent
    }

Exponer clase a inyectar desde componente

    fun dogCollectionComponent(): DogCollectionSubcomponent.Factory

Agregar puntos de entrada para que dagger haga la inyección de las propiedades

    fun inject(activity: MainActivity)

Agregar subcomponentes y dependencias a componente

    modules = [SubcomponentsModule::class],
    dependencies = [AppComponent::class]

Agregar anotaciones faltantes (no están relacionadas con dagger)

@FlowPreview
@ExperimentalCoroutinesApi
@ExperimentalAnimationApi
interface MainComponent {}

Crear módulo

Agregar módulo para asociar subcomponentes

@Module(subcomponents = [DogCollectionSubcomponent::class])
class SubcomponentsModule

Agregar anotaciones faltantes (no están relacionadas con dagger)

@ExperimentalCoroutinesApi
@FlowPreview