hilt - @ApplicationContext, @ActivityContext, @EntryPoin

2021. 1. 21. 14:18Android/DI(dependency injection)

Hilt는 몇 가지 사전 정의된 한정자를 제공합니다. 예를 들어 애플리케이션 또는 활동의 Context 클래스가 필요할 수 있으므로 Hilt는 @ApplicationContext  @ActivityContext 한정자를 제공합니다.

 

class AnalyticsAdapter @Inject constructor(
    @ActivityContext private val context: Context,
    private val service: AnalyticsService
) { .

 

@EntryPoint - 예를 들어 Hilt는 콘텐츠 제공자를 직접 지원하지 않습니다. 콘텐츠 제공자가 Hilt를 사용하여 일부 종속 항목을 가져오도록 하려면 원하는 결합 유형마다 @EntryPoint로 주석이 지정된 인터페이스를 정의하고 한정자를 포함해야 합니다.

 

class ExampleContentProvider : ContentProvider() {

  @EntryPoint
  @InstallIn(ApplicationComponent::class)
  interface ExampleContentProviderEntryPoint {
    fun analyticsService(): AnalyticsService
  }

  ...
}

 

진입점에 액세스하려면 EntryPointAccessors의 적절한 정적 메서드를 사용하세요. 매개변수는 구성요소 인스턴스이거나 구성요소 소유자 역할을 하는 @AndroidEntryPoint 객체여야 합니다. 매개변수로 전달하는 구성요소와 EntryPointAccessors 정적 메서드가 모두 @EntryPoint 인터페이스의 @InstallIn 주석에 있는 Android 클래스와 일치하는지 확인합니다.

 

class ExampleContentProvider: ContentProvider() {
    ...

  override fun query(...): Cursor {
    val appContext = context?.applicationContext ?: throw IllegalStateException()
    val hiltEntryPoint =
      EntryPointAccessors.fromApplication(appContext, ExampleContentProviderEntryPoint::class.java)

    val analyticsService = hiltEntryPoint.analyticsService()
    ...
  }
}

'Android > DI(dependency injection)' 카테고리의 다른 글

hilt - @HiltViewModel  (0) 2021.01.29
Hilt - @Provides, @Qualifier  (0) 2021.01.21
Hilt - @Inject 주석, @Module, @InstallIn, @Binds  (0) 2021.01.20
Hilt를 사용한 종속 항목 삽입  (0) 2021.01.20
수동 종속성 삽입  (0) 2021.01.20