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.

  • Cómo usar daga en un proyecto de biblioteca de Android
  • Dagger 2, a veces en la compilación me sale "no se puede encontrar la clase de símbolo DaggerApplicationComponent"
  • ¿La manera más simple de crear un Singleton w / Dagger 2?
  • Dagger 2: Proporcionar la misma instancia entre múltiples componentes con el mismo alcance en diferentes módulos de biblioteca
  • Qué es exactamente la daga y cómo funciona
  • Dagger 2 "Dagger" prefijo componente no es capaz de compilar? Clase generada automáticamente
  • ¿Es posible a los miembros de @Inject (proporcionados a través de @Provides), que contienen un Contexto de Actividad de la Actividad Base
  • Dagger 2.10 Subcomponentes y constructores de Android
  • Escopetas en Dagger 2
  • Android Espresso con Dagger
  • Dagger2 Component (un-scoped) no puede depender de los componentes del ámbito - Error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.