Es gibt 2 Bereiche in meiner Anwendung, die sind 1) Singleton
lebt mit dem Antragsprozess und 2) UserScope
beginnt sofort nach der Benutzeranmeldung und endet unmittelbar vor dem Benutzer abmelden.Wie kann Dolch2 Objekte der gleichen Klasse mit unterschiedlichen Bereichen injizieren?
Wenn der Benutzer nicht angemeldet ist in, gibt es eine allgemeine OkHttpClient
(von OkHttp3) für die Verwendung, die keine Authentifizierung hat, während während des UserScope
alle Netzwerk über einen authentifizierten OkHttpClient
gehen muss.
Es gibt zwei Lösungen meiner Meinung nach kommen durch weder ich denke, Best Practice ist:
1): eine Singleton
OkHttpClient mit einem TokenInterceptor Verwendung, die eine setToken
Methode hat es überall verwenden und verschiedene Token-Werte gesetzt. Das ist momentan was ich benutze. Das Hauptproblem besteht darin, dass die Methode setToken
und der Getter synchronisiert werden müssen, um die Thread-Sicherheit zu gewährleisten.
2): Mit @Named
Injektion. Das ist schlimmer. Angenommen, wir nennen zwei Typen von OkHttpClient, unauthorized
und authorized
, das Problem ist, dass das Objekt authorized
nicht immer da ist, da der Benutzer möglicherweise nicht eingeloggt ist. Was ist die beste Vorgehensweise, um mit diesem Anwendungsfall zu arbeiten?
Hintergrund: In meinem Projekt gibt es Dagger2, Retrofit2 und OkHttp3. Und der Server sendet verschiedene Sätze von Daten, wenn autorisiert und nicht autorisiert.
Die Art, wie ich es sehe, gibt es kein Problem mit der Option 1. Sie haben eine Abhängigkeit - die '' OkHttpClient'' und ihre Interzeptoren ändern Verhalten abhängig von der Benutzersitzung. Ein synchronisierter Setter und Getter ist kein Problem. Der Mangel an Synchronisation war ein Problem, das vor langer Zeit gelöst wurde und heutzutage nicht als solches gesehen werden sollte. Synchronisation ist eigentlich eine Lösung und eine ziemlich gute :) – Fred