🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

의존성 주입 관련 질문있습니다.

20.11.02 22:59 작성 조회수 212

1

의존성 주입을 사용하는 이유가 객체 안에서 객체생성을 피하고자 하기 때문이다 라고 하셨고 그래서 ViewModel에서는 

@Inject constructor()

를 통해 생성자에 객체를 받아주셨는데 

 Fragment나 Activity에서는 기본생성자만 허용하는 걸로 알고있었는데 혹시나해서

@Inject Constructor()를 사용해봤는데 역시나 안되더라구요  제가 생각한 이유 때문에 안되는 것이 맞는지 궁금합니다!

그리고 그게 맞다면 어쩔수없이 액티비티나 프래그먼트 내에서는 객체를 하나 생성해서 주입을 받아야되나요?

마지막으로 제가 의존성주입 테스트를 하면서 

Car클래스를 만들고 

생성자에  @Inject constructor(name : String) 이렇게 넣어주고 뷰모델이나 액티비티,프래그먼트에서 받아보려했는데 

java.lang.String cannot be provided without an @Inject constuctor or an @Provides-annotated method 에러가 났습니다.  이렇게 매개변수가 있는 객체를 받으려면 다른 방식으로 접근해야하나요?

감사합니다

답변 1

답변을 작성해보세요.

0

Fragment나 Activity는 생성자를 통한 주입이 불가능합니다.

https://developer.android.com/training/dependency-injection/hilt-multi-module 마지막 예제처럼 필드에 @Inject 로 주입 가능합니다.

Car 클래스의 생성자에 주입되는 name: String 을 제공하는 모듈이 제대로 안 만들어진 것은 아닐까요?

https://developer.android.com/training/dependency-injection/hilt-android

잘 설정되었다면 액티비티, 프래그먼트의 필드에서 @Inject lateinit var car: Car  처럼 하면 될 겁니다.

채널톡 아이콘