2017-02-28 4 views
0

アプリケーションに2つのスコープがあります.1つはSingleton、アプリケーションプロセスは2)UserScopeはユーザーログイン直後に開始し、ユーザーがログアウトする直前に終了します。dagger2は、同じスコープの同じクラスのオブジェクトをどのように注入できますか?

ユーザがログインしていないときは、認証がない一般的なOkHttpClient(OkHttp3)がありますが、UserScopeの間は、すべてのネットワークが認証されたOkHttpClientを通過する必要があります。

1)::どこでもそれを使用し、異なるトークン値を設定し、setToken方法を持っているTokenInterceptor、とSingleton OkHttpClientを使用して

2つの解決策はありますが、どちらも私はベストプラクティスであると考えないで私の心に来ます。これは現在私が使っているものです。ここでの主な問題は、setTokenメソッドとgetterがスレッドの安全性を保証するために同期されなければならないことです。

2):@Named注射剤を使用。これは悪いことです。 OkHttpClientの2種類、unauthorizedauthorizedの名前を付けたとします。問題は、ユーザーがログインしていない可能性があるため、authorizedオブジェクトが常に存在するとは限りません。 このユースケースを使用するのにベストプラクティスは何ですか?

背景:私のプロジェクトにはDagger2、Retrofit2、OkHttp3があります。また、サーバーは、許可された場合と許可されない場合とで異なるデータセットを送信します。

+0

オプション1では問題はありません。依存関係は1つあります。ユーザーセッションによっては、 '' OkHttpClient''とそのインターセプタが動作を変更します。同期化されたセッターとゲッターを持つことは問題ではありません。同期の欠如は長い時間前に解決された問題であり、今日ではそのように見られるべきではありません。同期は実際には解決策とかなり良いものです:) – Fred

答えて

1

私はOkHttpClientインスタンスにUserScopeを使用していますので、ユーザーがログインしている間に1つのOkHttpClientを持っています。このOkHttpClientはユーザーログイン後に一度インスタンス化され、 ユーザーがログに記録されていない場合は、LoginActivityのライフサイクルに関連するスコープのある別のOkHttpClientを使用します。

関連する問題