Generalidades

¿Cómo incluir componentes independientes de Dagger como método de «dependencia de componentes» en la jerarquía de subcomponentes de Hilt? | Por a.brazhkin | Septiembre de 2021

Blazhkin
1*nrlQ 6WbTZpsMPO6V69 zg
La foto de Yingjunjie en Unsplash

Hay dos formas de vincular componentes en Dagger: Subconjunto con Dependencia de componentes Y cada variante tiene sus propias ventajas.

P.ej, Subconjunto El método genera todo el código dentro :solicitud Módulo, puede causar errores de compilación como «No se puede acceder a SomeClass«Debido a la dependencia transitiva de esta clase. Dependencia de componentes Puede utilizarse para solucionar este problema. Puede leer más en el artículo Lock your Dagger in Gradle Modules.

Hilt se basa en subcomponentes y sus declaraciones están ocultas para nosotros, por lo que no podemos especificar dependencias en componentes externos. Veamos cómo podemos solucionarlo.

Una especie deSegundosume, tenemos 2 módulos gradle :solicitud -> :característica Y hay un componente de daga pura separado :característica Módulo (aquí no hay departamentos y complementos de Hilt), queremos incluirlo en la jerarquía de Hilt como una dependencia de componente.

// :feature module
@Singleton
@Component
interface SomeFeatureComponent
fun someFeature(): SomeFeature

Por lo tanto, podemos crear el módulo Hilt «proxy», que almacenará nuestros componentes externos y proporcionará todas las dependencias al gráfico Hilt.ahora `someFeature` Hilt puede inyectar el componente externo de la daga donde quiera :solicitud Módulo.

// :app module
@Module
@InstallIn(SingletonComponent::class)
internal class SomeFeatureProxyModule

// Pass as method args any dependencies from :app you need to build component
@Singleton
@Provides
fun someFeatureComponent(application: Application): SomeFeatureComponent
return DaggerSomeFeatureComponent.builder().build()

// Use someFeature in Hilt
@Provides
fun someFeature(someFeatureComponent: SomeFeatureComponent): SomeFeature
return someFeatureComponent.someFeature()

Tenga en cuenta que esta solución no solo es aplicable a Hilt, sino que también es totalmente aplicable al enfoque de subcomponentes.Cuando no usa Hilt y crea manualmente el diagrama, puede declarar dependencias solo para el componente raíz anotado @ElementoPero para cualquier @Submontaje no se puede.Pero se puede adjuntar @Módulo llegar @Submontaje Y usa la solución alternativa.

El código fuente está disponible en GitHub

LEER  Día 1 del código #100DaysOf. 100DaysOfCode Journal | Por Henna Singh | Febrero de 2022

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba