2017-02-28 35 views
0

在我的應用程序中有兩個示波器,它們是:1)Singleton與應用程序一起生活,並且2)UserScope在用戶登錄後立即開始並且在用戶登出之前立即結束。dagger2如何使用不同的作用域注入同一類的對象?

當用戶沒有登錄時,有一個通用的OkHttpClient(來自OkHttp3)用於沒有身份驗證,而在UserScope期間,所有網絡都必須經過身份驗證OkHttpClient

有兩種解決方案可以來我的心無論是我認爲最好的做法:

1):使用Singleton OkHttpClient與TokenInterceptor,其中有一個setToken方法,在任何地方使用它,並設置不同的標記值。這是目前我正在使用的。這裏的主要問題是必須對setToken方法和getter進行同步以確保線程安全。

2):使用@Named進樣。這更糟糕。假設我們給出了兩種類型的OkHttpClient,unauthorizedauthorized,問題在於用戶可能沒有登錄,所以authorized對象並不總是存在。 那麼使用這個用例的最佳做法是什麼?

背景:在我的項目中有Dagger2,Retrofit2和OkHttp3。當授權和未授權時,服務器將發送不同的數據組。

+0

我看到它的方式沒有選項1的問題。您有一個依賴項 - 「OkHttpClient」及其攔截器根據用戶會話更改行爲。有一個同步的setter和getter不是問題。缺乏同步是很久以前解決的一個問題,現在不應該被視爲這樣。同步實際上是一個解決方案和一個很好的:) – Fred

回答

1

我使用UserScope for OkHttpClient實例,所以在用戶登錄時我有單個的OkHttpClient。這個OkHttpClient在用戶登錄後實例化一次,並且我設置了一次令牌。 如果用戶沒有登錄,我使用另一個具有範圍的OkHttpClient,與我的LoginActivity生命週期相關。

相關問題