클린 아키텍쳐를 위하여
app - domain - data 의 Layer로 분리한다고 했을 때,
app은 domain의 의존성을 갖고(usecase or repository interface 등),
data는 domain의 의존성을 갖는다(repository interface를 상속해야함 등)
그런데 app 이 domain 의 의존성만 갖고 있으면 빌드 에러가 났었다.
(data의 di에서 Repository interface의 구현체인 RepositoryImp 을 주입해주는데, domain의 의존성만으로 repositoryImp을 알 수 없기 때문이라고 생각한다)
따라서 app 모듈에서 domain과 data 모듈에 모두 의존성을 추가하니 문제가 해결되었다.
--아무리 구글링해도 안나왔다. 한 4시간 정도 삽질했다--
에러문구는 아래와 같았다.
C:\Users\user\Desktop\androidWorkspace\KuringHouse\app\build\generated\source\kapt\debug\com\yeonkyu\kuringhouse\KuringHouseApplication_HiltComponents.java:140: error: [Dagger/MissingBinding] com.yeonkyu.domain.repository.LoginRepository cannot be provided without an @Provides-annotated method.
public abstract static class SingletonC implements KuringHouseApplication_GeneratedInjector,
^
com.yeonkyu.domain.repository.LoginRepository is injected at
com.yeonkyu.domain.usecase.auth.GetUserUseCase(repository)
com.yeonkyu.domain.usecase.auth.GetUserUseCase is injected at
com.yeonkyu.kuringhouse.presentation.login.LoginViewModel(getUserUseCase, ��)
com.yeonkyu.kuringhouse.presentation.login.LoginViewModel is injected at
com.yeonkyu.kuringhouse.presentation.login.LoginViewModel_HiltModules.BindsModule.binds(vm)
@dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.String,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at
dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.yeonkyu.kuringhouse.KuringHouseApplication_HiltComponents.SingletonC �� com.yeonkyu.kuringhouse.KuringHouseApplication_HiltComponents.ActivityRetainedC �� com.yeonkyu.kuringhouse.KuringHouseApplication_HiltComponents.ViewModelC]
It is also requested at:
com.yeonkyu.domain.usecase.auth.AuthorizeUseCase(repository)
com.yeonkyu.domain.usecase.auth.UpdateUserUseCase(repository)C:\Users\user\Desktop\androidWorkspace\KuringHouse\app\build\generated\source\kapt\debug\com\yeonkyu\kuringhouse\KuringHouseApplication_HiltComponents.java:140: error: [Dagger/MissingBinding] com.yeonkyu.domain.repository.RoomRepository cannot be provided without an @Provides-annotated method.
public abstract static class SingletonC implements KuringHouseApplication_GeneratedInjector,
그리고 Retrofit은 Data Layer 에만 있으면 될 것이라 생각했는데, app Layer 에서도 같이 의존성을 추가해야했다.
(이거는 다행히 에러로그가 비교적 친절하다 - 대충 Retrofit을 provide받을 수 없다는 에러 문구)
'Programming > Android' 카테고리의 다른 글
[이슈 기록] Android 라이브러리 의존성 문제 해결하기 (0) | 2022.10.03 |
---|---|
[이슈 기록] TagetSdk 30 -> 31 올리는 과정에서 까다로웠던 이슈 기록 android:exported needs to be explicitly specified for <activity> 이슈 (2) | 2022.05.30 |
[번역] RecyclerView를 Wrapping했을 때 퍼포먼스 이슈 - feat.NestedScrollView (1) | 2022.03.04 |
메모리 누수 이슈 기록 (LocationListener) (0) | 2022.01.30 |
[Android] 첫 오픈소스 라이브러리 배포 - HoldableSwipeHandler 원리 및 출시 후기 (8) | 2022.01.03 |