[Dagger/MissingBinding] OAuthService cannot be provided without an @Provides-annotated method.

leeeha·2024년 11월 5일

Trouble Shooting

목록 보기
1/5
post-thumbnail

LoveMarker 프로젝트를 개발하며 발생했던 이슈들을 기록합니다!

💥 어떤 문제가 발생했나요?

/Users/haeun/AndroidStudioProjects/LoveMarker/app/build/generated/hilt/component_sources/debug/com/capstone/lovemarker/LoveMarkerApplication_HiltComponents.java:135:

error: [Dagger/MissingBinding] com.capstone.lovemarker.oauth.service.OAuthService cannot be provided without an @Provides-annotated method.

public abstract static class SingletonC implements LoveMarkerApplication_GeneratedInjector,

com.capstone.lovemarker.oauth.service.OAuthService is requested at
[com.capstone.lovemarker.LoveMarkerApplication_HiltComponents.SingletonC] com.capstone.lovemarker.feature.login.di.OAuthEntryPoint.googleAuthService()

⇒ LoveMarkerApplication_HiltComponents 파일 경로를 유심히 보면, app 모듈에서 발생한 오류라는 걸 알 수 있다.

🤷‍♀️ 왜 발생했나요?

참고 블로그: https://yk-coding-letter.tistory.com/36

app 모듈에서 data 모듈에 대한 참조 없이 feature 모듈만 참조하고 있어서 발생한 오류였다!!!!

:data:oauth 모듈에서 아래 코드처럼 인터페이스에 대한 구현체를 바인딩 시켜줬는데

package com.capstone.lovemarker.oauth.di

import com.capstone.lovemarker.oauth.service.GoogleAuthService
import com.capstone.lovemarker.oauth.service.OAuthService
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dagger.hilt.android.scopes.ActivityScoped

@Module
@InstallIn(ActivityComponent::class)
abstract class OAuthModule {
    @ActivityScoped
    @Binds
    abstract fun bindGoogleAuthService(
        googleAuthService: GoogleAuthService,
    ): OAuthService
}

이 코드를 app 모듈에서 참조할 수 없기 때문에 빌드 에러가 발생했다.

🤔 어떻게 해결했나요?

:data:oauth 모듈에 정의된 OAuthModule 클래스를 app 모듈에서도 참조할 수 있도록, app 모듈의 build.gradle.kts 파일을 다음과 같이 수정했다.

Before

dependencies {
    // feature
    implementation(projects.feature.login)
    
    // ... 
}

After


dependencies {
    // feature
    implementation(projects.feature.login)
    
    // data 
    implementation(projects.data.oauth) 
    
    // ... 
}

전에 앱 모듈의 액티비티에서 로그인 화면을 실행시키려고 임시로 :feature:login 모듈 추가했었는데, 그때 관련 코드를 지우지 않고 남겨둔 게 영향을 미쳤다...ㅠㅠ

어제 밤부터 오늘 낮까지 삽질하다가.. 해결 완료!!

🙏 오늘의 교훈

  • 불필요한 코드는 그때그때 삭제하자.
  • 모듈 간의 의존성을 잘 확인하자. (멀티 모듈에 적응하는 중!!)
  • 지피티에 의존하기 보다는, 구글링을 먼저 하는 게 좋은 거 같다. (나도 앞으로 블로그에 트러블슈팅 기록을 많이 남겨야겠다!)
profile
습관이 될 때까지 📝

0개의 댓글