SpaceX-prepare-for-Clean-Architecture-liftoff icon indicating copy to clipboard operation
SpaceX-prepare-for-Clean-Architecture-liftoff copied to clipboard

@Singleton annotation

Open enciyo opened this issue 2 years ago • 0 comments

Hi,

Thanks for good project. I want to give some suggestions. If you want singleton component, you must use @Singleton annotation. Maybe this can be your choice. I think it should at least be a retrofit singleton.

package prieto.fernando.data_api.di

import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import okhttp3.OkHttpClient import prieto.fernando.data.SpaceXRemoteSource import prieto.fernando.data_api.ApiService import prieto.fernando.data_api.data.SpaceXRemoteSourceImpl import prieto.fernando.data_api.mapper.* import retrofit2.Retrofit

@Module @InstallIn(SingletonComponent::class) object ApiModule { @Provides fun provideSpaceXRemoteSource( apiService: ApiService, companyInfoRepositoryMapper: CompanyInfoResponseToRepositoryModelMapper, launchesRepositoryMapper: LaunchesResponseToRepositoryModelMapper ): SpaceXRemoteSource = SpaceXRemoteSourceImpl(apiService, companyInfoRepositoryMapper, launchesRepositoryMapper)

@Provides
fun provideCompanyInfoResponseToRepositoryModelMapper(): CompanyInfoResponseToRepositoryModelMapper =
    CompanyInfoResponseToRepositoryModelMapperImpl()

@Provides
fun provideLaunchesResponseToRepositoryModelMapper(
    dateFormatter: DateFormatter
): LaunchesResponseToRepositoryModelMapper =
    LaunchesResponseToRepositoryModelMapperImpl(dateFormatter)

@Provides
fun provideDateFormatter(): DateFormatter =
    DateFormatterImpl()

@Provides
@JvmStatic
internal fun provideApi(retrofit: Retrofit): ApiService =
    retrofit.create(ApiService::class.java)

@Provides
@JvmStatic
internal fun provideRetrofit(
    httpBuilder: OkHttpClient.Builder,
    retrofitBuilder: Retrofit.Builder
): Retrofit = retrofitBuilder
    .client(httpBuilder.build())
    .build()

}

enciyo avatar Jul 08 '22 09:07 enciyo