Skip to content

Commit 397d26c

Browse files
authored
Merge pull request #83 from hoc081098/koin_3_2_0
refactor: koin 3.2.0 ~> constructor DSL
2 parents c1cbfce + 4b2004c commit 397d26c

File tree

7 files changed

+123
-420
lines changed

7 files changed

+123
-420
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 22 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.hoc.comicapp.koin
22

3-
import android.content.Context
43
import androidx.work.WorkManager
54
import com.google.firebase.auth.FirebaseAuth
65
import com.google.firebase.firestore.FirebaseFirestore
@@ -15,75 +14,49 @@ import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
1514
import kotlinx.coroutines.CoroutineScope
1615
import kotlinx.coroutines.SupervisorJob
1716
import org.koin.android.ext.koin.androidContext
17+
import org.koin.core.module.dsl.bind
18+
import org.koin.core.module.dsl.singleOf
1819
import org.koin.dsl.module
1920

21+
private val provideAppCoroutineScope = { dispatchersProvider: CoroutinesDispatchersProvider ->
22+
CoroutineScope(dispatchersProvider.io + SupervisorJob())
23+
}
24+
25+
private val provideMoshi = {
26+
Moshi
27+
.Builder()
28+
.add(KotlinJsonAdapterFactory())
29+
.build()
30+
}
31+
2032
val appModule = module {
2133
/*
2234
* Rx Schedulers + CoroutinesDispatchers + App CoroutineScope
2335
*/
2436

25-
single { provideRxSchedulerProvider() }
37+
singleOf(::RxSchedulerProviderImpl) { bind<RxSchedulerProvider>() }
2638

27-
single { provideCoroutinesDispatchersProvider(get()) }
39+
singleOf(::CoroutinesDispatchersProviderImpl) { bind<CoroutinesDispatchersProvider>() }
2840

29-
single { provideAppCoroutineScope(get()) }
41+
singleOf(provideAppCoroutineScope)
3042

3143
/*
3244
* WorkManager + Moshi + JsonAdaptersContainer
3345
*/
3446

35-
single { provideWorkManager(androidContext()) }
47+
single { WorkManager.getInstance(androidContext()) }
3648

37-
single { provideMoshi() }
49+
singleOf(provideMoshi)
3850

39-
single { provideJsonAdaptersContainer(get()) }
51+
singleOf(::JsonAdaptersContainer)
4052

4153
/*
4254
* FirebaseAuth + FirebaseStorage + FirebaseFirestore
4355
*/
4456

45-
single { provideFirebaseAuth() }
46-
47-
single { provideFirebaseStorage() }
48-
49-
single { provideFirebaseFirestore() }
50-
}
51-
52-
private fun provideAppCoroutineScope(dispatchersProvider: CoroutinesDispatchersProvider): CoroutineScope {
53-
return CoroutineScope(dispatchersProvider.io + SupervisorJob())
54-
}
55-
56-
private fun provideFirebaseAuth(): FirebaseAuth {
57-
return FirebaseAuth.getInstance()
58-
}
59-
60-
private fun provideFirebaseStorage(): FirebaseStorage {
61-
return FirebaseStorage.getInstance()
62-
}
63-
64-
private fun provideFirebaseFirestore(): FirebaseFirestore {
65-
return FirebaseFirestore.getInstance()
66-
}
67-
68-
private fun provideWorkManager(context: Context): WorkManager {
69-
return WorkManager.getInstance(context)
70-
}
71-
72-
private fun provideRxSchedulerProvider(): RxSchedulerProvider {
73-
return RxSchedulerProviderImpl()
74-
}
75-
76-
private fun provideCoroutinesDispatchersProvider(rxSchedulerProvider: RxSchedulerProvider): CoroutinesDispatchersProvider {
77-
return CoroutinesDispatchersProviderImpl(rxSchedulerProvider)
78-
}
57+
single { FirebaseAuth.getInstance() }
7958

80-
private fun provideJsonAdaptersContainer(moshi: Moshi): JsonAdaptersContainer {
81-
return JsonAdaptersContainer(moshi)
82-
}
59+
single { FirebaseStorage.getInstance() }
8360

84-
private fun provideMoshi(): Moshi {
85-
return Moshi
86-
.Builder()
87-
.add(KotlinJsonAdapterFactory())
88-
.build()
61+
single { FirebaseFirestore.getInstance() }
8962
}
Lines changed: 17 additions & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,12 @@
11
package com.hoc.comicapp.koin
22

3-
import android.app.Application
4-
import android.content.Context
5-
import androidx.work.WorkManager
6-
import com.google.firebase.auth.FirebaseAuth
7-
import com.google.firebase.firestore.FirebaseFirestore
8-
import com.google.firebase.storage.FirebaseStorage
93
import com.hoc.comicapp.data.ErrorMapper
10-
import com.hoc.comicapp.data.JsonAdaptersContainer
114
import com.hoc.comicapp.data.analytics.AnalyticsServiceImpl
125
import com.hoc.comicapp.data.firebase.favorite_comics.FavoriteComicsDataSource
136
import com.hoc.comicapp.data.firebase.favorite_comics.FavoriteComicsDataSourceImpl
147
import com.hoc.comicapp.data.firebase.user.FirebaseAuthUserDataSource
158
import com.hoc.comicapp.data.firebase.user.FirebaseAuthUserDataSourceImpl
169
import com.hoc.comicapp.data.local.AppDatabase
17-
import com.hoc.comicapp.data.local.dao.ChapterDao
18-
import com.hoc.comicapp.data.local.dao.ComicDao
19-
import com.hoc.comicapp.data.remote.ComicApiService
2010
import com.hoc.comicapp.data.repository.ComicRepositoryImpl
2111
import com.hoc.comicapp.data.repository.DownloadComicsRepositoryImpl
2212
import com.hoc.comicapp.data.repository.FavoriteComicsRepositoryImpl
@@ -26,212 +16,50 @@ import com.hoc.comicapp.domain.repository.ComicRepository
2616
import com.hoc.comicapp.domain.repository.DownloadComicsRepository
2717
import com.hoc.comicapp.domain.repository.FavoriteComicsRepository
2818
import com.hoc.comicapp.domain.repository.UserRepository
29-
import com.hoc.comicapp.domain.thread.CoroutinesDispatchersProvider
30-
import com.hoc.comicapp.domain.thread.RxSchedulerProvider
31-
import kotlinx.coroutines.CoroutineScope
32-
import org.koin.android.ext.koin.androidApplication
3319
import org.koin.android.ext.koin.androidContext
20+
import org.koin.core.module.dsl.bind
21+
import org.koin.core.module.dsl.singleOf
3422
import org.koin.dsl.module
35-
import retrofit2.Retrofit
3623

3724
val dataModule = module {
3825
/*
3926
* FavoriteComicsRepository + ComicRepository + DownloadComicsRepository
4027
*/
4128

42-
single { provideFavoriteComicsRepository(get(), get()) }
43-
44-
single {
45-
provideComicRepository(
46-
errorMapper = get(),
47-
comicApiService = get(),
48-
dispatchersProvider = get(),
49-
favoriteComicsDataSource = get(),
50-
comicDao = get(),
51-
appCoroutineScope = get(),
52-
analyticsService = get(),
53-
)
54-
}
55-
56-
single {
57-
provideDownloadComicsRepository(
58-
application = androidApplication(),
59-
comicApiService = get(),
60-
dispatchersProvider = get(),
61-
comicDao = get(),
62-
chapterDao = get(),
63-
appDatabase = get(),
64-
rxSchedulerProvider = get(),
65-
errorMapper = get(),
66-
workManager = get(),
67-
jsonAdaptersContainer = get(),
68-
analyticsService = get(),
69-
)
70-
}
71-
72-
single { provideUserRepository(get(), get()) }
29+
singleOf(::FavoriteComicsRepositoryImpl) { bind<FavoriteComicsRepository>() }
30+
31+
singleOf(::ComicRepositoryImpl) { bind<ComicRepository>() }
32+
33+
singleOf(::DownloadComicsRepositoryImpl) { bind<DownloadComicsRepository>() }
34+
35+
singleOf(::UserRepositoryImpl) { bind<UserRepository>() }
7336

7437
/*
7538
* AppDatabase + Dao
7639
*/
7740

78-
single { provideAppDatabase(androidContext()) }
41+
single { AppDatabase.getInstance(androidContext()) }
7942

80-
single { provideChapterDao(get()) }
43+
single { get<AppDatabase>().chapterDao() }
8144

82-
single { provideComicDao(get()) }
45+
single { get<AppDatabase>().comicDao() }
8346

8447
/*
8548
* Firebase data source
8649
*/
8750

88-
single {
89-
provideFirebaseAuthUserDataSource(
90-
get(),
91-
get(),
92-
get(),
93-
get(),
94-
get(),
95-
)
96-
}
97-
98-
single {
99-
provideFavoriteComicsDataSource(
100-
get(),
101-
get(),
102-
get(),
103-
get(),
104-
get(),
105-
get(),
106-
)
107-
}
51+
singleOf(::FirebaseAuthUserDataSourceImpl) { bind<FirebaseAuthUserDataSource>() }
52+
53+
singleOf(::FavoriteComicsDataSourceImpl) { bind<FavoriteComicsDataSource>() }
10854

10955
/*
11056
* ErrorMapper
11157
*/
11258

113-
single { provideErrorMapper(get()) }
59+
singleOf(::ErrorMapper)
11460

11561
/*
11662
* Analytics
11763
*/
118-
single<AnalyticsService> { AnalyticsServiceImpl() }
119-
}
120-
121-
private fun provideFavoriteComicsRepository(
122-
errorMapper: ErrorMapper,
123-
favoriteComicsDataSource: FavoriteComicsDataSource,
124-
): FavoriteComicsRepository {
125-
return FavoriteComicsRepositoryImpl(
126-
errorMapper = errorMapper,
127-
favoriteComicsDataSource = favoriteComicsDataSource,
128-
)
129-
}
130-
131-
private fun provideComicRepository(
132-
errorMapper: ErrorMapper,
133-
comicApiService: ComicApiService,
134-
dispatchersProvider: CoroutinesDispatchersProvider,
135-
favoriteComicsDataSource: FavoriteComicsDataSource,
136-
comicDao: ComicDao,
137-
appCoroutineScope: CoroutineScope,
138-
analyticsService: AnalyticsService,
139-
): ComicRepository {
140-
return ComicRepositoryImpl(
141-
errorMapper = errorMapper,
142-
comicApiService = comicApiService,
143-
dispatchersProvider = dispatchersProvider,
144-
favoriteComicsDataSource = favoriteComicsDataSource,
145-
comicDao = comicDao,
146-
appCoroutineScope = appCoroutineScope,
147-
analyticsService = analyticsService
148-
)
149-
}
150-
151-
private fun provideDownloadComicsRepository(
152-
application: Application,
153-
comicApiService: ComicApiService,
154-
dispatchersProvider: CoroutinesDispatchersProvider,
155-
comicDao: ComicDao,
156-
chapterDao: ChapterDao,
157-
appDatabase: AppDatabase,
158-
rxSchedulerProvider: RxSchedulerProvider,
159-
errorMapper: ErrorMapper,
160-
workManager: WorkManager,
161-
jsonAdaptersContainer: JsonAdaptersContainer,
162-
analyticsService: AnalyticsService,
163-
): DownloadComicsRepository {
164-
return DownloadComicsRepositoryImpl(
165-
comicApiService = comicApiService,
166-
application = application,
167-
dispatchersProvider = dispatchersProvider,
168-
comicDao = comicDao,
169-
chapterDao = chapterDao,
170-
appDatabase = appDatabase,
171-
rxSchedulerProvider = rxSchedulerProvider,
172-
errorMapper = errorMapper,
173-
workManager = workManager,
174-
jsonAdaptersContainer = jsonAdaptersContainer,
175-
analyticsService = analyticsService,
176-
)
177-
}
178-
179-
private fun provideUserRepository(
180-
errorMapper: ErrorMapper,
181-
userDataSource: FirebaseAuthUserDataSource,
182-
): UserRepository {
183-
return UserRepositoryImpl(
184-
errorMapper = errorMapper,
185-
userDataSource = userDataSource,
186-
)
187-
}
188-
189-
private fun provideAppDatabase(context: Context): AppDatabase {
190-
return AppDatabase.getInstance(context)
191-
}
192-
193-
private fun provideChapterDao(appDatabase: AppDatabase): ChapterDao {
194-
return appDatabase.chapterDao()
195-
}
196-
197-
private fun provideComicDao(appDatabase: AppDatabase): ComicDao {
198-
return appDatabase.comicDao()
199-
}
200-
201-
private fun provideFirebaseAuthUserDataSource(
202-
firebaseAuth: FirebaseAuth,
203-
firebaseStorage: FirebaseStorage,
204-
firebaseFirestore: FirebaseFirestore,
205-
rxSchedulerProvider: RxSchedulerProvider,
206-
dispatchersProvider: CoroutinesDispatchersProvider,
207-
): FirebaseAuthUserDataSource {
208-
return FirebaseAuthUserDataSourceImpl(
209-
firebaseAuth = firebaseAuth,
210-
firebaseStorage = firebaseStorage,
211-
firebaseFirestore = firebaseFirestore,
212-
rxSchedulerProvider = rxSchedulerProvider,
213-
dispatchersProvider = dispatchersProvider,
214-
)
215-
}
216-
217-
private fun provideFavoriteComicsDataSource(
218-
firebaseAuth: FirebaseAuth,
219-
firebaseFirestore: FirebaseFirestore,
220-
rxSchedulerProvider: RxSchedulerProvider,
221-
dispatchersProvider: CoroutinesDispatchersProvider,
222-
firebaseAuthUserDataSource: FirebaseAuthUserDataSource,
223-
appCoroutineScope: CoroutineScope,
224-
): FavoriteComicsDataSource {
225-
return FavoriteComicsDataSourceImpl(
226-
firebaseAuth = firebaseAuth,
227-
firebaseFirestore = firebaseFirestore,
228-
rxSchedulerProvider = rxSchedulerProvider,
229-
dispatchersProvider = dispatchersProvider,
230-
firebaseAuthUserDataSource = firebaseAuthUserDataSource,
231-
appCoroutineScope = appCoroutineScope,
232-
)
233-
}
234-
235-
private fun provideErrorMapper(retrofit: Retrofit): ErrorMapper {
236-
return ErrorMapper(retrofit)
64+
singleOf(::AnalyticsServiceImpl) { bind<AnalyticsService>() }
23765
}

0 commit comments

Comments
 (0)