number medium last injection implement google dependency compiler annotationprocessor android dependency-injection dagger

android - medium - Singletons en Daga 1.x



implement dagger 2 android (1)

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

Entonces, si tiene algo que está marcado como @Singleton , y se materializa en su gráfico de aplicación (en lugar de un gráfico de vida más corta), entonces obtiene una instancia por aplicación.

Si tiene un elemento anotado @Singleton que se encuentra en los módulos que usa 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 más ()), obtendrá uno por cada -actividad-grafica.

Si necesita que algo sea una vez por aplicación, debe asegurarse de que se cree como parte del gráfico de la aplicación. Puedes hacer esto de una de dos maneras. Puede proporcionarlo explícitamente con un método @Provides desde su (s) módulo (s) de aplicación, o puede listarlo como una de las clases en @Module (inyects = ...) en un módulo de aplicación.

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

Entonces, recuerde que el gráfico creado por más () se ve como un gráfico separado que apunta al gráfico desde el cual se generó, y lo envuelve, puede acceder a las 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 un gráfico (componente) por anotación de alcance, con una relación padre / hijo entre gráficos de tiempos de vida más amplios / más estrechos.

Al usar Dagger, descubrí que obtenía múltiples instancias de un singleton cuando lo inyectaba donde lo necesitaba. He anotado la clase y el método proporciona con @Singleton . ¿Alguien puede pensar por qué esto está sucediendo?

Editar:

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

(PD: soy nuevo en Dagger y DI en general, así que le agradeceré que me brinde una explicación para que pueda aprender. Gracias).