Jack 오답노트
Hilt 어노테이션 정리 본문
@HiltAndroidApp
Hilt 코드 생성. Application 클래스에 달아야 함
@HiltAndroidApp
class HiltApplication: Application() {
}
@AndroidEntryPoint
DI 컨테이너 추가. 주로 뷰에서 힐트를 이용한 뷰모델 초기화할 때 쓴다. Base에 선언하면 편하다
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject
1. 생성자 주입. 인스턴스를 제공하는 데 사용할 생성자와 형식에 어떤 종속성이 있는지 알려준다.
class ContentRepositoryImpl @Inject constructor(
private val contentService: ContentService,
private val contentDao: ContentDao
) : ContentRepository {
2. 필드 주입. @AndroidEntryPoint 주석이 달린 클래스의 필드를 채울때 쓰고 필드는 private 일 수 없다.
@AndroidEntryPoint
class MyActivity : AppCompatActivity() {
@Inject lateinit var adapter: AnalyticsAdapter
}
@HiltViewModel
뷰모델 컴포넌트 알려줌. Repository module 에서 provide로 제공하기때문에 inject usecase 만 하면 접근가능하다.
@HiltViewModel
class MainViewModel @Inject constructor(
private val contentUseCase: ContentUseCase
): ViewModel() {
@Module
생성자를 주입할 수 없는 유형에 대한 바인딩을 추가할 수 있는 클래스. 대거 그래프를 위해 작업.
@InstallIn
Hilt에서 생성된 DI 컨테이너(코드의 SingletonComponent) 모듈 바인딩을 사용할 수 있어야한다는 표시.
@Module
@InstallIn(SingletonComponent::class)
object RetrofitModule {
@Module
@InstallIn(ViewModelComponent::class)
object RepositoryModule {
@Provides
@ViewModelScoped
fun providesViewModelRepository( ... )
@Provides
생성자를 주입할 수 없는 유형에 대한 바인딩 추가
- 반환 유형은 바인딩 유형
- 매개변수는 종속성
- 인스턴스가 필요할 때마다 유형이 범위가 지정되지 않은 경우 함수 본문이 실행
@Singleton
뷰/뷰모델과 별개의 공간으로 어디서든 접근이 가능한 클래스. 그 외 Scope는 여기 참고
@Provides
@Singleton
fun providesRetrofit(
client: OkHttpClient.Builder,
gsonConverterFactory: GsonConverterFactory
): Retrofit = ...
참고자료: https://developer.android.com/training/dependency-injection/hilt-cheatsheet?hl=ko
'android' 카테고리의 다른 글
Camera Focus 관련 정리 (0) | 2022.10.19 |
---|---|
인앱 웹뷰 dialog 버튼 안보임 (0) | 2022.06.28 |
Recyclerview 뷰 재사용으로 인한 사이즈 깨짐 (0) | 2021.12.09 |
databinding build 에러 (0) | 2021.11.16 |
Execution failed for task ':app:kaptDebugKotlin' (0) | 2021.10.06 |
Comments