Injetando o contexto do aplicativo no módulo de biblioteca com o Dagger 2

Estou criando um aplicativo com alguns recursos: um ContentProvider, um SyncAdapter, um serviço de trabalho e uma lógica de persistência relacionada. Além disso, há as atividades com a interface do usuário. Estou tentando colocar todos os recursos em um módulo de biblioteca separado, porque, em teoria, a lógica deles é autônoma e seria reutilizável por qualquer aplicativo.

Agora vem o Dagger2. O primeiro nó (Componente principal) do gráfico de dependência da minha biblioteca precisa fornecer Contexto, e esse Contexto precisa ser injetado no Aplicativo, porque o escopo da biblioteca tem o mesmo ciclo de vida do aplicativo. Para ser independente, obviamente, minha biblioteca não deve usar diretamente minha classe Application.

Estas são as possibilidades que pensei:

Crie o componente principal da biblioteca em meu aplicativo e armazene-o em uma classe / enum estática global, conforme sugeridoaqui mas estou preocupado que o uso de uma referência estática possa ser um antipadrão.Empacote na biblioteca uma classe Aplicativo que construa o Componente com escopo definido na biblioteca, transmita o contexto do aplicativo para essa classe na biblioteca para usar o componente e estenda essa classe Aplicativo no aplicativo principal. Isso funciona, mas se houver mais de uma biblioteca, não será mais viável.Use o padrão de fábrica: coloque métodos de provisão no componente da biblioteca que fornece a fábrica que, por sua vez, recebe o contexto disponível localmente como parâmetro. (Como explicadoaqui) Isso parece viável, embora adicione complexidade extra.Por último, mas não menos importante, desista de tentar modularizar os componentes, pois depender do contexto do aplicativo quebra o conceito de modularidade.

Qual é a maneira correta de fazer isso?