Ich baue eine App mit einigen Features: ein ContentProvider ein SyncAdapter, ein Job-Service und verwandte Persistenz Logik. Hinzu kommen die Aktivitäten mit der Benutzeroberfläche. Ich versuche, alle genannten Features in ein separates Bibliotheksmodul zu integrieren, da ihre Logik theoretisch eigenständig und für jede Anwendung wiederverwendbar ist.Injizieren Anwendungskontext in Bibliothek Modul mit Dolch 2
Jetzt kommt Dagger2. Der erste Knoten (Hauptkomponente) des Abhängigkeitsgraphen meiner Bibliothek muss Kontext bereitstellen, und dieser Kontext muss von der Anwendung aus injiziert werden, da der Bibliotheksbereich den gleichen Lebenszyklus der Anwendung aufweist. Um offensichtlich eigenständig zu sein, sollte meine Bibliothek meine Anwendungsklasse nicht direkt verwenden.
Dies sind die Möglichkeiten, die ich gedacht:
- die Hauptkomponente der Bibliothek bauen in meiner Anwendung und speichern sie in einer globalen statischen Klasse/Enum als here vorgeschlagen, aber ich bin besorgt, dass eine statische Referenz solche mit könnte ein Anti-Muster sein.
- Packen Sie in der Bibliothek eine Application-Klasse, die die bibliotheksspezifische Komponente erstellt, umwandeln Sie den App-Kontext zu dieser Klasse in der Bibliothek, um die Komponente zu verwenden, und erweitern Sie dann diese Application-Klasse in der Hauptanwendung. Das funktioniert, aber wenn es mehr als eine Bibliothek gibt, ist es nicht mehr lebensfähig.
- Verwenden Sie das Factory-Muster: Setzen Sie Provisionierungsmethoden in die Bibliothekskomponente, die die Factory bereitstellt, die wiederum den lokal verfügbaren Kontext als Parameter erhält. (Wie erklärt here). Dies erscheint möglich, obwohl es zusätzliche Komplexität hinzufügt.
- Last but not least, geben Sie es auf, die Komponenten zu modularisieren, da abhängig vom Kontext der Anwendung das Konzept der Modularität bricht.
Was ist der richtige Weg, dies zu tun?
Ich möchte das gleiche tun. Hast du eine Lösung gefunden? –
Ich habe diese Frage vergessen :) Ich habe eine Lösung gefunden, siehe meine Antwort unten. – devrocca