@AndoidEntryPoint를 붙이는 것은 Component를 만드는 과정 Component에서 Component로 의존성 주입 및 받기 가능, 주입 받을 Class에 AndroidEntryPoint 붙인다
ㅁ Filed Ingection
ㅁ Constructor Ingection
ㅁ Module
ㅁ Hilt를 통하지 않고 Build패턴이나 외부라이브러리를 이용해서 객체를 생성해야 할때는 Privides를 사용 여기서
1) @Modules을 붙임으로서 Hilt의 모듈이 된다.
2) @InstallIn(ActivityComponent::class) 를 붙임으로서 ActivityComponent 안에 설치되면서 Scope가 ActivityScope로 설정된다.
3) 모듈 안에는 AnalyticsService로 반환하는 함수가 있는데 이 함수에 Provides를 붙임으로서 AnalyticsModule이 AnalyticsService의 의존성을 외부로 전달할 수 있게 된다.
ㅁ AnalyticsService라는 Interface를 의존객체로 제공하기위해서는 Binds
이때 Abstact로 binds 구현해야함
실제 사용 예시(BookService 앱을 예시)
- 기존 RetrofitInastance Object를 Hilt Module로 만들어 줘보자.
- Module로 생성
@Module
// Room 의존성 작성
// workmanager 의존성 작성
// repository 주입 받기 위한 모듈 작성
<정리 : 의존성주입은 단방향 >
1) Appmodule에 의존성을 BookSearchRepasitory에 주입을 한다
2) BookSearchRepasitory Instancesms의존성을 BookSearchViewmodel에 주입
3) 각 BookSearchViewmodel 의 의존성을 Fragment나 Activity에 주입
(1) Appmodule에 의존성을 BookSearchRepasitory에 주입
- @Singleton을 붙여 의존성 주입 가능한 Scope로 지정해줌, 그러면 Inject constructor(여기 안에 객체들은 Hilt가 주입을 하게 된다.)
(2) Viewmodel에 의존성주입
(3) Fragment에 Viewmodel 주입
- delegate 추가하면 viewmodel factory만들 필요 없음, Viewmodel이 delegate에 의해 만들어지기 때문에 ProviderFactory는 필요 없어진다!
- @AndroidEntryPoint로 Fragment가 의존성 주입 가능한 스코프로 만들어주고 activityViewModels를 이용하여 의존성을 받는다
'안드로이드 > 정리(Android)' 카테고리의 다른 글
안드로이드 HTTP 통신 (2) | 2022.09.09 |
---|---|
Android) Databinding 정리 (0) | 2022.08.16 |
[Android] ViewModel 알아보기 (0) | 2022.08.04 |
Android - CustomView 만들기 (0) | 2022.05.12 |
Android - MVVM + ROOM + RETROFIT 활용 앱 (0) | 2022.04.26 |