dagger2如何用不同的范围注入同一类的对象?

时间:2017-02-28 07:55:49

标签: java android dagger-2 okhttp3 dagger

我的应用程序中有两个范围,其中1)Singleton与应用程序进程一起生效,2)UserScope在用户登录后立即启动,并在用户注销之前立即结束。

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

我认为有两种解决方案,我认为不是最佳做法:

1):使用带有Singleton方法的TokenInterceptor的setToken OkHttpClient,在任何地方使用它并设置不同的标记值。这是我正在使用的。这里的主要问题是必须同步setToken方法和getter以确保线程安全。

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

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

1 个答案:

答案 0 :(得分:1)

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