Я использую Koin как DI для моего приложения.Я создал модуль:
object NetworkModule {
fun get() = module {
single {
val localStorage: LocalStorage = get()
val loggingInterceptor = HttpLoggingInterceptor()
loggingInterceptor.level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY
else HttpLoggingInterceptor.Level.NONE
val authInterceptor = Interceptor { chain ->
val original = chain.request()
// Request customization: add request headers
val requestBuilder = original.newBuilder()
if (localStorage.deviceToken != null) {
requestBuilder.addHeader("device_token", localStorage.deviceToken!!)
}
if (localStorage.authToken != null) {
requestBuilder.addHeader("access_token", localStorage.authToken!!)
}
val request = requestBuilder.build()
chain.proceed(request)
}
OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(authInterceptor)
.addInterceptor(loggingInterceptor)
.build()
}
single {
Retrofit.Builder()
.baseUrl(Const.BASE_API_URL)
.client(get())
.addConverterFactory(GsonConverterFactory.create(get()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
.create(Api::class.java)
В некоторых запросах я мог бы использовать AutheniticationInterceptor
, а в других - нет.Как я могу построить свой HttpClient
или Retrofit
по-разному, учитывая такой случай.
Могу ли я передать некоторые параметры или что-то?Я просто потерян здесь.Любые предложения будут оценены.