Asistir a la Inyección con Dagger/Hilt
Digamos que tengo una interfaz llamada interfazA
interface InterfaceA {}
Y su implementación con inyección asistida con Assisted
class ImplClass @AssistedInject constructor(@Assisted someClass:SomeCLass):InterfaceA {
}
¿Cómo usaría Assisted
Inject en este caso, donde Dagger también requiere la vinculación de la clase concreta con la interfaz?
¿Es esta la forma correcta o me falta algo?
class ImplClass @AssistedInject constructor(@Assisted someClass:SomeCLass):InterfaceA {
@AssistedFactory
interface DaggerFactory : Factory {
override fun create(someClass:SomeCLass): ImplClass
}
interface Factory {
fun create(someClass:SomeCLass): InterfaceA
}
}
Y luego, vincularlo de la siguiente manera
@Module
@InstallIn(ActivityComponent::class)
interface BindsSomething {
@Binds
fun binds(factory: ImplClass.DaggerFactory): ImplClass.Factory
}
El enfoque anterior funciona bien, sin embargo, me pregunto si hay una forma mejor o diferente con menos código redundante, de la cual no tengo conocimiento.
davy.ai
Tu enfoque es correcto y estándar cuando se utiliza la inyección asistida (
Assisted
) con Dagger. La anotación@AssistedFactory
se utiliza para generar una fábrica que crea instancias de la clase que utilizan la inyección asistida. La interfazFactory
se utiliza para crear instancias deInterfaceA
a partir de la fábrica generada.La anotación
@Binds
se utiliza para vincular la fábrica con su interfaz relacionada. En este caso, se está vinculandoImplClass.DaggerFactory
conImplClass.Factory
.Este enfoque es la forma recomendada de utilizar la inyección asistida (
Assisted
) con Dagger y no hay otra forma con menos plantilla.