Also, was ich versuche zu erreichen, ist sicherzustellen, dass ich nur eine Instanz pro Bereich in Dagger2 habe.Sicherstellen nur einer Instanz pro Bereich in Dagger2
Der Standard-Singleton-Bereich funktioniert bereits auf diese Weise. Egal wie viele Stellen Sie dasselbe Objekt injizieren, nennen wir es GlobalInstance
, Methode GlobalInstance provideGlobalInstance()
, die es einmal und nur einmal aufrufen wird.
Auf der anderen Seite, wenn ich benutzerdefinierten Bereich definieren, zum Beispiel @SessionScope
und innerhalb einiger SessionModule
Ich mache Methode User provideUser()
, dass Verfahren (und folgerichtig, new User()
Konstruktor) wird so oft aufgerufen werden, wie ich bin User
injiziert wird. Egal, ob ich jedes Mal die gleiche Modulinstanz verwende, User provideUser()
wird für jede @Inject User mUser
aufgerufen, die ich in meinem Code, resultierend mit mehreren Instanzen, anstelle eines Scope-limitierten "Singleton" habe.
Gibt es einen klaren Weg, um es zu erreichen, mit regulären Dagger api. Eine Möglichkeit, dies zu tun, ist, faule Getter innerhalb der Modulklasse zu haben, aber es ist keine sehr saubere Art, dies zu tun.
Sie sollten die gleichen Komponenten verwenden, um sicherzustellen, dass Sie die Instanz injizieren, die – EpicPandaForce
Ok an die angegebene Komponente gehört, so sollte stattdessen ein Modul von persistierenden, ich anhalten irgendwie ganze Komponente, oder? Was ist die beste Vorgehensweise dafür? Einige statische/globale Komponenten cachen? – SadClown
Ja, normalerweise ja. Ich habe 'static' für den Gültigkeitsbereich @Singleton und' onRetainCustomNonConfigurationInstance() 'für Aktivität gesehen. 'Map' sonst, wo sie die Komponente zu einem Schlüssel in der Karte speichern –
EpicPandaForce