Singletons en Dagger 1.x

Al usar Dagger, encontré que estoy recibiendo múltiples instancias de singleton cuando lo inyecto donde sea que lo necesite. He anotado la clase y el método proporciona con @Singleton . ¿Puede alguien pensar en por qué esto está sucediendo?

Editar:

Si me ayuda, he seguido la misma estructura para mi aplicación que la aplicación de ejemplo en GitHub de Dagger ( https://github.com/square/dagger/tree/master/examples/android-activity-graphs ). Estoy tratando de obtener el Singleton en la actividad de base y un par de clases de terceros proporcionados utilizando @Provides en la clase de Application personalizada. ¿Es porque estoy más-ing módulos en cada actividad al gráfico del objeto original?

(PS: Soy nuevo en Dagger y DI en general, así que estaré agradecido si pudieras dar una explicación para que yo pueda aprender.) Gracias.

@Singleton , en Dagger 1.x, actúa de manera diferente de lo que usted podría pensar. La definición de la especificación JSR-330 en el javadoc @Singleton es "una por gráfico" y así es como Dagger la interpreta.

Así que si tienes algo que está marcado como @Singleton , y se materializa en tu gráfico de aplicación (en contraposición a un gráfico de menor duración), obtendrás una instancia por aplicación.

Si tiene un elemento anotado @Singleton que está en los módulos que utiliza para configurar su gráfico de actividad (es decir, que se obtiene de la parte de un gráfico especificado por un módulo utilizado en la operación plus (), obtendrá uno por cada -actividad-gráfico.

Si necesita algo para ser una vez por aplicación, debe asegurarse de que se crea como parte del gráfico de aplicación. Puede hacerlo de dos formas. O bien le proporciona explícitamente un método @Provides desde su módulo de aplicaciones, o puede listarlo como una de las clases en @Module (injects = …) en un módulo de aplicación.

(Si no lo marca con @Singleton , obtendrá uno por cada sitio de inyección.)

Así que recuerde, el gráfico creado por plus () se ve como un gráfico separado que apunta a la gráfica de la que se generó, y lo envuelve, puede acceder a instancias dentro de él, pero no es el mismo gráfico.

Nota – Dagger 2.x mejora esto y admite anotaciones de alcance personalizadas, aunque el mecanismo es similar, con una anotación de gráfico (componente) por ámbito, con una relación padre / hijo entre gráficos de vidas más anchas / más estrechas

  • ¿Se puede utilizar Spring Framework en aplicaciones android?
  • ¿Se aplican también a Dagger "Evita los marcos de inyección de dependencia" en la Guía de memoria de Android?
  • Ampliación de ObjectGraph con módulo de sustitución
  • Android Dagger Dependency Injection falla en campos privados
  • Inyección de clase genérica con Dagger
  • Dagger 2 - Inyectar bibliotecas de terceros en servicios y actividades de Android
  • Bean and EBean conception Anotaciones para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.