개선 된 DI를 관리하는 더 나은 방법을 찾고 있습니다. 내 앱은 재시작 할 수없는 여러 가지 변형을 요구할 수 있습니다 : 재시작 불가, 긴 시간 초과, 캐시 된 또는 캐시되지 않은 것 등단검 2 커스터마이징 제공 개장
해결 방법 이름이 지정된 params를 사용할 수 있으며 제공 할 수있는 다른 종류의 okhttp/retrofit을 지정할 수 있습니다. 필자가 사용할 때 모든 가능한 조합에 대해 다른 제공된 함수를 만들어야하고 명명 된 params의 문자열을 유지해야한다는 것을 의미합니다. 내 NetworkModule 클래스가 매우 커질 수 있습니다.
- 에 :
NetworkModule.kt
@Module class NetworkModule { @Provides @Singleton fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor { val loggingInterceptor = HttpLoggingInterceptor { message -> Timber.d(message) } loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY return loggingInterceptor } @Provides @Named("standard") @Singleton fun provideOkHttpClient(httpLoggingInterceptor: HttpLoggingInterceptor): OkHttpClient { val httpClientBuilder = OkHttpClient.Builder() if (BuildConfig.DEBUG) httpClientBuilder.addInterceptor(httpLoggingInterceptor) return httpClientBuilder.build() } @Provides @Named("standard") @Singleton fun provideRetrofit(@Named("baseUrl") baseUrl: String, @Named("standard") okHttpClient: OkHttpClient): Retrofit { return Retrofit.Builder() .baseUrl(baseUrl) .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build() } }
LoginApiModule.kt이 예에서
@Module(includes = arrayOf(NetworkModule::class)) class LoginApiModule { @Provides @Singleton internal fun provideLoginApi(@Named("standard") retrofit: Retrofit): LoginService { return retrofit.create(LoginService::class.java) } }
나는 모든 전문화를위한
provide<some specialization>OkHttpClient()
기능을 필요 더 긴 시간 제한 등 등 비 retryability와 cachine에 대한
- 하나 캐싱 캐싱
- 하나 더 긴 제한 시간을 모두
- 한 비 retryability
- 하나
- 하나 전자
이렇게 제공 기능을 하나만 사용하여이 작업을 수행하고 싶습니까? – Yashasvi
그래, 그렇게 생각해! 어쩌면 불가능할 수도 있고 다른 모듈 클래스를 사용해야 할 수도 있습니다. –
아직 그것에 대해 생각하고 있습니다. 하지만 왜 다른 모듈 클래스. 함수는 단일 (네트워크) 모듈에있을 것입니다. 맞습니까? – Yashasvi