アプリケーションに2つのスコープがあります.1つはSingleton
、アプリケーションプロセスは2)UserScope
はユーザーログイン直後に開始し、ユーザーがログアウトする直前に終了します。dagger2は、同じスコープの同じクラスのオブジェクトをどのように注入できますか?
ユーザがログインしていないときは、認証がない一般的なOkHttpClient
(OkHttp3)がありますが、UserScope
の間は、すべてのネットワークが認証されたOkHttpClient
を通過する必要があります。
1)::どこでもそれを使用し、異なるトークン値を設定し、setToken
方法を持っているTokenInterceptor、とSingleton
OkHttpClientを使用して
2つの解決策はありますが、どちらも私はベストプラクティスであると考えないで私の心に来ます。これは現在私が使っているものです。ここでの主な問題は、setToken
メソッドとgetterがスレッドの安全性を保証するために同期されなければならないことです。
2):@Named
注射剤を使用。これは悪いことです。 OkHttpClientの2種類、unauthorized
とauthorized
の名前を付けたとします。問題は、ユーザーがログインしていない可能性があるため、authorized
オブジェクトが常に存在するとは限りません。 このユースケースを使用するのにベストプラクティスは何ですか?
背景:私のプロジェクトにはDagger2、Retrofit2、OkHttp3があります。また、サーバーは、許可された場合と許可されない場合とで異なるデータセットを送信します。
オプション1では問題はありません。依存関係は1つあります。ユーザーセッションによっては、 '' OkHttpClient''とそのインターセプタが動作を変更します。同期化されたセッターとゲッターを持つことは問題ではありません。同期の欠如は長い時間前に解決された問題であり、今日ではそのように見られるべきではありません。同期は実際には解決策とかなり良いものです:) – Fred