我的应用程序中有两个范围,其中1)Singleton
与应用程序进程一起生效,2)UserScope
在用户登录后立即启动,并在用户注销之前立即结束。
当用户未登录时,有一般OkHttpClient
(来自OkHttp3)供使用且没有身份验证,而在UserScope
期间,所有网络都必须通过经过身份验证的OkHttpClient
我认为有两种解决方案,我认为不是最佳做法:
1):使用带有Singleton
方法的TokenInterceptor的setToken
OkHttpClient,在任何地方使用它并设置不同的标记值。这是我正在使用的。这里的主要问题是必须同步setToken
方法和getter以确保线程安全。
2):使用@Named
注射。这更糟糕。假设我们命名两种类型的OkHttpClient,unauthorized
和authorized
,问题是authorized
对象并不总是存在,因为用户可能没有登录。
那么使用这个用例的最佳做法是什么?
背景:在我的项目中有Dagger2,Retrofit2和OkHttp3。当授权和未授权时,服务器将发送不同的数据集。
答案 0 :(得分:1)
我将UserScope用于OkHttpClient实例,因此在用户登录时我有单个OkHttpClient。这个OkHttpClient在用户登录后实例化一次,我只设置了一次令牌。 如果用户未登录,我使用另一个带有范围的OkHttpClient,与我的LoginActivity生命周期相关。