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