dagger2 如何注入具有不同范围的相同 class 的对象?

How can dagger2 inject objects of the same class with different scopes?

我的应用程序中有 2 个范围,它们是 1) Singleton 与应用程序进程一起存在和 2) UserScope 在用户登录后立即开始并在用户登录前结束出。

当用户未登录时,有一个通用的OkHttpClient(来自OkHttp3)没有身份验证,而在UserScope期间所有网络都必须经过身份验证OkHttpClient.

我想到了两种解决方案,但我认为这两种解决方案都不是最佳做法:

1): 使用带有 TokenInterceptor 的 Singleton OkHttpClient,它有一个 setToken 方法,到处使用它并设置不同的标记值。这是我目前正在使用的。这里主要的问题是setToken方法和getter必须同步才能保证线程安全。

2): 使用@Named注入。这更糟。假设我们命名了两种类型的 OkHttpClient,unauthorizedauthorized,问题是 authorized 对象并不总是存在,因为用户可能没有登录。 那么处理这个用例的最佳实践是什么?

背景:在我的项目中有Dagger2、Retrofit2 和OkHttp3。并且服务器在授权和未授权时会发送不同的数据集。

我将 UserScope 用于 OkHttpClient 实例,因此当用户登录时我只有一个 OkHttpClient。这个 OkHttpClient 在用户登录后实例化一次,我只设置了一次令牌。 如果用户未登录,我将使用另一个具有范围的 OkHttpClient,与我的 LoginActivity 生命周期相关。