Inyectar dependencias en singleton con Dagger?
¿Es posible tener Dagger inyectar singletons para usted?
Como están las cosas, sólo he encontrado una manera de proporcionar manualmente dependencias a singletons:
- Aplicación simple de OCR con cámara androide
- ¿Cómo puedo añadir Selendroid a Android Studio para rascar web?
- Android Studio - Problema en build.gradle uncaught error de traducción ExecutionException OutOfMemory
- ¿Cómo encontrar la ruta a NDK?
- Notificaciones de proximidad BLE de Android
@Provides @Singleton public Dispatcher providesDispatcher(Context context, PPreferences preferences, FileNameCache fileNameCache) { return new Dispatcher(context, preferences, fileNameCache); }
¿Es esta la única forma de definir singletons? Lo que prefiero hacer es algo como lo siguiente para que Dagger inyecte las dependencias en sí, sin embargo, al hacerlo me da un error.
@Provides @Singleton public Dispatcher providesDispatcher(Dispatcher dispacher) { return dispacher; }
Tal vez hay otra manera de definir singletons que me permitiría inyectar otros singletons en ellos sin embargo?
Cualquier ayuda es apreciada.
EDIT: Acabo de darme cuenta de que estoy haciendo el segundo enfoque con otro Singleton, sin embargo, es un caso ligeramente diferente como estoy cartografiar una implementación a una interfaz:
@Provides @Singleton public Tracker providesTracker(TrackerImpl tracker) { return tracker; }
TrackerImpl se inyecta con una instancia de las referencias PP mencionadas anteriormente también.
Cuando intento tenerlo crear el Dispatcher con el segundo ejemplo esto es el error que consigo:
error: Unknown error java.lang.IllegalStateException thrown by javac in graph validation: Dependency cycle: 0. com.example.test.Dispatcher bound by @Singleton/ProviderMethodBinding[provideKey="com.example.test.Dispatcher", memberskey="null"] 0. com.example.test.Dispatcher
- ¿Cómo funciona NDK en Android - ¿Cuál es la orden que NDK, JNI etc se utilizan?
- Cant valor de acceso de SharedPreference en diferentes subprocesos
- Context.getApplicationContext () devuelve null en un Service
- Uso de Gson para analizar la matriz y el objeto Json sin nombre
- Mostrar la fecha / hora UTC en la fecha / hora de acuerdo con la zona horaria actual
- Cambiar el posicionamiento del índice en InputStream
- ¿Cómo parse la fecha en Java? cierta confusión en los formatos de fecha
- Clases múltiples que extienden la aplicación
No es necesario tener un método @Provides (en el módulo) para crear una instancia de singleton de Dispatcher. Simplemente anote el constructor Dispatcher con @Inject y la clase con @Singleton. Dagger usará esa instancia cada vez que inyecte una instancia de Dispatcher.
@Singleton public class Dispatcher { @Inject public Dispatcher(..) }
- Cómo pasar valores a AsyncTask Android
- ¿Cómo puedo implementar FragmentManager y FragmentTransaction para reemplazar sólo un fragmento?