Dagger se puede utilizar para realizar la inyección en un proveedor de contenido?

Recientemente he estado integrando Dagger en un proyecto que utiliza ContentProviders. Creo una única instancia de ObjectGraph en mi objeto Application personalizado y básicamente en cada componente administrado:

  • Actividad,
  • Fragmento,
  • Servicio

… Entonces, llamo a getApplication (), downcast a mi objeto de aplicación personalizado, y forzar la inyección a través de alguna implementación personalizada en mi clase de aplicación. Este parece ser el método prescrito de realizar la inyección basándose en las muestras que he visto publicadas por los chicos en Square.

Este patrón no es válido para las instancias de ContentProvider, ya que su ciclo de vida no está asociado de manera previsible al ciclo de vida del objeto Application, es decir, ContentProviders puede ser, y como estoy observando frecuentemente, creado antes de que se cree el objeto Application. Razones que todavía tengo que comprender).

Así que … ¿alguien tiene una buena manera de inyectar ContentProviders usando Dagger? Hasta ahora lo he logrado al tener una llamada isInjected() al principio de cada uno de los métodos de interfaz de mis ContentProvider (insertar, consultar, actualizar, eliminar) … básicamente una forma hacky de inicialización perezosa. Pero esto parece lejos del ideal. ¿Hay un enfoque más prescripto para inyectar ContentProviders?

One Solution collect form web for “Dagger se puede utilizar para realizar la inyección en un proveedor de contenido?”

La subclase de Application es sólo una convención ya que suele ser el primer objeto creado. Nuestras aplicaciones no tienen proveedores de contenido, por lo que los utilizamos. No hay nada que diga que no se puede poner en otro lugar.

Sólo puede utilizar el patrón singleton tradicional para instanciar y mantener una referencia a la ObjectGraph .

 public final class Dagger { static ObjectGraph og; static ObjectGraph og() { if (og == null) { og = ObjectGraph.create(..); } return og; } } 

La primera persona a la que se accede inicializará la instancia que se utilizará durante toda la vida del proceso.

Si su proveedor de contenido se encuentra en un proceso diferente al de su aplicación principal, esta solución seguirá funcionando. O simplemente puede crear el gráfico cuando se crea su proveedor de contenido ya que será el único consumidor. Normas multi-proceso normales siguen aplicándose, por supuesto, por lo que no se compartirán instancias con los otros procesos.

  • Dagger - clase no tiene miembros inyectables
  • Dagger 2, a veces en la compilación me sale "no se puede encontrar la clase de símbolo DaggerApplicationComponent"
  • Dagger 2.2 método del módulo de constructor de componentes obsoleto
  • ¿La manera más simple de crear un Singleton w / Dagger 2?
  • Creación de una aplicación Android Instant con componente de aplicación de Dagger
  • No se puede proporcionar sin un constructor @Inject o de un método @ Proporcionado-anotado
  • Escopetas en Dagger 2
  • Componente Dagger2 con más de una dependencia
  • Adición de clases sin actividad a Dagger 2 Graph Android
  • Qué es exactamente la daga y cómo funciona
  • Dagger 2, módulos de biblioteca y @Singleton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.