在我的應用程序中有兩個示波器,它們是:1)Singleton
與應用程序一起生活,並且2)UserScope
在用戶登錄後立即開始並且在用戶登出之前立即結束。dagger2如何使用不同的作用域注入同一類的對象?
當用戶沒有登錄時,有一個通用的OkHttpClient
(來自OkHttp3)用於沒有身份驗證,而在UserScope
期間,所有網絡都必須經過身份驗證OkHttpClient
。
有兩種解決方案可以來我的心無論是我認爲最好的做法:
1):使用Singleton
OkHttpClient與TokenInterceptor,其中有一個setToken
方法,在任何地方使用它,並設置不同的標記值。這是目前我正在使用的。這裏的主要問題是必須對setToken
方法和getter進行同步以確保線程安全。
2):使用@Named
進樣。這更糟糕。假設我們給出了兩種類型的OkHttpClient,unauthorized
和authorized
,問題在於用戶可能沒有登錄,所以authorized
對象並不總是存在。 那麼使用這個用例的最佳做法是什麼?
背景:在我的項目中有Dagger2,Retrofit2和OkHttp3。當授權和未授權時,服務器將發送不同的數據組。
我看到它的方式沒有選項1的問題。您有一個依賴項 - 「OkHttpClient」及其攔截器根據用戶會話更改行爲。有一個同步的setter和getter不是問題。缺乏同步是很久以前解決的一個問題,現在不應該被視爲這樣。同步實際上是一個解決方案和一個很好的:) – Fred