Retrofit ve Dagger 2 kullanıyorum. Oeuth belirteci eklemek için bir OkHttp Interceptor
uyguladım. Herhangi bir oauth jetonu olmadığı veya zaman damgasının geçersiz olduğu durumda, asıl talep gerçekleştirilmeden önce yenisini (Yükseltme servisi aracılığıyla) talep ediyorum.OkHttpClient bağımlılık döngüsü olmadan OkHttpClient kullanarak
Bu, Yükseltme hizmetinin Interceptor
gerektirdiği bir bağımlılık döngüsü oluşturur, ancak Interceptor
ayrıca Retrofit hizmetini de gerektirir (oauth belirtecini almak için). (Her zaman restService#refreshAccessToken
aracılığıyla belirteci istekleri basitleştirme için) Interceptor
için
Örnek:
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request.Builder requestBuilder = originalRequest.newBuilder();
String authHeader = "Bearer " + restService.refreshAccessToken();
requestBuilder.addHeader("Authorization", authHeader);
return chain.proceed(requestBuilder.build());
}
İlginç yaklaşımdır Tembel enjeksiyonu, tercih ederim. Her talep/kesişim bir enjeksiyona neden olduğu için bir dezavantajı var mı (ör. Performans)? Ayrıca Uygulama, bana biraz garip görünüyor NetworkComponent, ortaya çıkarmak zorunda. – Maradox
Hançer 2 hızlı bir şekilde üretildi çünkü hızlı bir şekilde oluşturulmuş kod kullanıyor, bu yüzden aslında 'RestService'inizi kuran bazı yöntemleri çağırıyor. Bütün sınıfı cevaplarıma enjekte etmekten kaçınan alternatif bir yol ekledim. Bunu sağlayan 'Uygulama' olmak zorunda değil, uygulamanızın 'Tekton' bileşenlerini başka ne sağlayabilir? Uygulama çapındaki uygulamalarınızı Uygulamada saklamak, okuduğum tüm Hançer 2 şeylerinde yaygın bir uygulamadır. –