Inyección de contexto de aplicación en el módulo de biblioteca con Dagger 2

Estoy creando una aplicación con algunas características: un ContentProvider, un SyncAdapter, un servicio de Job y una lógica de persistencia relacionada. Además de estas, están las Actividades con la IU. Estoy tratando de poner todas las funciones mencionadas en un módulo de biblioteca separado, porque en teoría su lógica es independiente y cualquier aplicación podría reutilizarla.

Ahora viene Dagger2. El primer nodo (Componente principal) del gráfico de dependencia de mi biblioteca necesita proporcionar Contexto, y este Contexto tiene que ser inyectado desde la Aplicación, porque el alcance de la biblioteca tiene el mismo ciclo de vida de la aplicación. Para ser autónomo, obviamente, mi biblioteca no debe usar directamente mi clase de aplicación.

Estas son las posibilidades que pensé:

Construya el componente principal de la biblioteca en mi aplicación y almacénelo en una clase / enumeración estática global como se sugiereaquí pero me preocupa que el uso de una referencia tan estática pueda ser un antipatrón.Empaquete en la biblioteca una clase de Aplicación que construya el Componente con ámbito de biblioteca, transmita el contexto de la aplicación a esta clase en la biblioteca para usar el componente y luego extienda esta clase de Aplicación en la aplicación principal. Esto funciona, pero si hay más de una biblioteca ya no es viable.Utilice el patrón de fábrica: coloque métodos de aprovisionamiento en el componente de la biblioteca que proporcionan la fábrica, que a su vez recibe el contexto disponible localmente como parámetro. (Como se explicaaquí) Esto parece viable, aunque agrega complejidad adicional.Por último, pero no menos importante, deje de intentar modularizar los componentes, ya que depender del contexto de la aplicación rompe el concepto de modularidad.

¿Cuál es la forma correcta de hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta