kuroshitsuji - dagger marvel
Daga sobre constructores por defecto. (1)
Estoy tratando de hacer que Dagger trabaje en mi proyecto.
Sin embargo, obtengo la siguiente excepción en una de mis clases durante la compilación:
error: No hay miembros inyectables en Foo. ¿Quieres añadir un constructor inyectable?
Sin embargo, la clase no tiene dependencias y, como tal, utiliza el constructor no-arg predeterminado:
public class Foo
{
...
}
¿Realmente tengo que agregar un constructor inyectable sin argumentos como el siguiente?
public class Foo
{
@Inject
public Foo()
{
}
....
}
De la docs :
Dagger no puede construir las clases que carecen de anotaciones @Inject.
Dagger requiere activamente que agregue @Inject a su clase inyectable, ya sea agregando un constructor sin argumentos, o agregando un campo inyectable. La tercera opción es devolver la clase de un método @Provides de esta manera:
@Module(...)
class MyModule {
@Provides Foo provideFoo() {
return new Foo(); // Foo is not injectable.
}
}
Esto parece algo extra, pero a partir de la experiencia con Guice y otros marcos, el enlace JIT de clases aleatorias está lleno de errores. Hemos visto java.lang.String inyectada en cosas, y como alguien se olvidó de atarlo, terminaste con "" inyectado en lugar de la cadena deseada. Dagger, por lo tanto, requiere un constructor o campo @Inject. (Guice opcionalmente tiene esto en 4.x, aunque por compatibilidad con versiones anteriores, está desactivado de forma predeterminada)
Este es un caso raro en el que Dagger ha elegido más garantías de corrección a costa de una pequeña cantidad de verbosidad.