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,unauthorized
和 authorized
,问题是 authorized
对象并不总是存在,因为用户可能没有登录。
那么处理这个用例的最佳实践是什么?
背景:在我的项目中有Dagger2、Retrofit2 和OkHttp3。并且服务器在授权和未授权时会发送不同的数据集。
我将 UserScope 用于 OkHttpClient 实例,因此当用户登录时我只有一个 OkHttpClient。这个 OkHttpClient 在用户登录后实例化一次,我只设置了一次令牌。
如果用户未登录,我将使用另一个具有范围的 OkHttpClient,与我的 LoginActivity 生命周期相关。
我的应用程序中有 2 个范围,它们是 1) Singleton
与应用程序进程一起存在和 2) UserScope
在用户登录后立即开始并在用户登录前结束出。
当用户未登录时,有一个通用的OkHttpClient
(来自OkHttp3)没有身份验证,而在UserScope
期间所有网络都必须经过身份验证OkHttpClient
.
我想到了两种解决方案,但我认为这两种解决方案都不是最佳做法:
1): 使用带有 TokenInterceptor 的 Singleton
OkHttpClient,它有一个 setToken
方法,到处使用它并设置不同的标记值。这是我目前正在使用的。这里主要的问题是setToken
方法和getter必须同步才能保证线程安全。
2): 使用@Named
注入。这更糟。假设我们命名了两种类型的 OkHttpClient,unauthorized
和 authorized
,问题是 authorized
对象并不总是存在,因为用户可能没有登录。
那么处理这个用例的最佳实践是什么?
背景:在我的项目中有Dagger2、Retrofit2 和OkHttp3。并且服务器在授权和未授权时会发送不同的数据集。
我将 UserScope 用于 OkHttpClient 实例,因此当用户登录时我只有一个 OkHttpClient。这个 OkHttpClient 在用户登录后实例化一次,我只设置了一次令牌。 如果用户未登录,我将使用另一个具有范围的 OkHttpClient,与我的 LoginActivity 生命周期相关。