繁体   English   中英

dagger2如何注入具有不同作用域的相同类的对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM