es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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 interfaz Factory se utiliza para crear instancias de InterfaceA 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á vinculando ImplClass.DaggerFactory con ImplClass.Factory.

    Este enfoque es la forma recomendada de utilizar la inyección asistida (Assisted) con Dagger y no hay otra forma con menos plantilla.

Comments are closed.