[英]How can dagger2 inject objects of the same class with different scopes?
我的应用程序中有2个作用域,它们是1) Singleton
与应用程序进程一起生存; 2) UserScope
在用户登录后立即开始,并在用户注销前立即结束。
当用户未登录时,有一个通用的OkHttpClient
(来自OkHttp3)可供使用,它没有身份验证,而在UserScope
期间,所有网络都必须通过一个经过身份验证的OkHttpClient
。
我认为有两种解决方案都不是最佳实践:
1):将Singleton
OkHttpClient与TokenInterceptor一起使用,该令牌具有setToken
方法,可在各处使用它并设置不同的令牌值。 这是我目前正在使用的。 这里的主要问题是setToken
方法和getter必须同步以确保线程安全。
2):使用@Named
注入。 这更糟。 假设我们将OkHttpClient命名为两种类型,即unauthorized
和已authorized
,问题在于authorized
对象并不总是存在的,因为用户可能未登录。 那么,使用此用例的最佳实践是什么?
背景:在我的项目中有Dagger2,Retrofit2和OkHttp3。 授权和未授权时,服务器将发送不同的数据集。
我将UserScope用于OkHttpClient实例,因此在用户登录时只有一个OkHttpClient。此OkHttpClient在用户登录后实例化一次,并且我只设置了一次令牌。 如果未登录用户,那么我将使用另一个具有范围的OkHttpClient,该范围与我的LoginActivity生命周期相关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.