hilt - @ApplicationContext, @ActivityContext, @EntryPoin
2021. 1. 21. 14:18ㆍAndroid/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 |