2017-11-07 17 views
2

개선 된 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
  • 하나
  • 하나 전자
+0

이렇게 제공 기능을 하나만 사용하여이 작업을 수행하고 싶습니까? – Yashasvi

+0

그래, 그렇게 생각해! 어쩌면 불가능할 수도 있고 다른 모듈 클래스를 사용해야 할 수도 있습니다. –

+0

아직 그것에 대해 생각하고 있습니다. 하지만 왜 다른 모듈 클래스. 함수는 단일 (네트워크) 모듈에있을 것입니다. 맞습니까? – Yashasvi

답변