2017-02-28 37 views
0

在我的应用程序中有两个示波器,它们是:1)Singleton与应用程序一起生活,并且2)UserScope在用户登录后立即开始并且在用户登出之前立即结束。dagger2如何使用不同的作用域注入同一类的对象?

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

有两种解决方案可以来我的心无论是我认为最好的做法:

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

2):使用@Named进样。这更糟糕。假设我们给出了两种类型的OkHttpClient,unauthorizedauthorized,问题在于用户可能没有登录,所以authorized对象并不总是存在。 那么使用这个用例的最佳做法是什么?

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

+0

我看到它的方式没有选项1的问题。您有一个依赖项 - “OkHttpClient”及其拦截器根据用户会话更改行为。有一个同步的setter和getter不是问题。缺乏同步是很久以前解决的一个问题,现在不应该被视为这样。同步实际上是一个解决方案和一个很好的:) – Fred

回答

1

我使用UserScope for OkHttpClient实例,所以在用户登录时我有单个的OkHttpClient。这个OkHttpClient在用户登录后实例化一次,并且我设置了一次令牌。 如果用户没有登录,我使用另一个具有范围的OkHttpClient,与我的LoginActivity生命周期相关。

相关问题