본문 바로가기
Android

[안드로이드] Hilt에서 동일한 타입을 반환하는 경우: @Qulifier, public abstract static class singletonc implements ... , cannot be provided without an @Provides-annotated method.

by JongSeok 2023. 8. 12.

Hilt를 이용해 개발하던 중 다음과 같은 오류가 발생했습니다.

public abstract static class singletonc implements ... 
cannot be provided without an @Provides-annotated method.

특히 단일 모듈에서는 문제가 없었지만 기존과 다른 URL 주소와 네트워크 통신을 하기 위해 @qulifier 어노테이션을 이용해 멀티모듈로 변경하는 과정에서 버그가 발생했습니다.

의존성을 주입하는 과정에서 Hilt는 동일한 타입의 객체가 여러개 반환되는 경우에 각각의 반환 타입을 어느 객체에 주입할지 명시해 주어야 합니다.

 

위 이미지에서 Retrofit 객체가 반환되는 메소드가 두 개이기 때문에 @Qulifier 어노테이션을 사용해 각각의 Retrofit 객체에 어노테이션 클래스로 이름을 붙여줍니다.

그리고 Retrofit을 반환하는 provideRetrofit()provideAddressRetrofit() 메소드에 지정했던 어노테이션 클래스명을 명시하고 Retrofit 객체를 주입받는 provideMainRetrofitService()provideAddressRetrofitService()에서 어디서 반환되는 Retrofit 객체를 주입할지 생성자 앞에 추가합니다.

 

그치만 해당 코드를 실행하면 에러가 발생합니다.

... cannot be provided without an @Provides-annotated method.
... public abstract static class SingletonC implements MyApplication_GeneratedInjector

 

몇 시간을 삽질했지만 명확한 이유는 찾지 못했습니다.

 

제가 찾은 해결 방법은 Retrofit객체를 주입받는 메소드에도 @Qulifier로 지정했던 어노테이션 클래스명을 추가해 주는 것이었습니다.

최종 코드

힐트는 어려워요오..

728x90
반응형