Hilt: 맞춤 진입점
2638 단어 android
Hilt은 Android용 훌륭한 종속성 주입 프레임워크입니다. Dagger의 모든 강점을 가지고 있으며 .
Android 클래스에
@AndroidEntryPoint
주석만 추가하면 마술처럼 @Inject
주석이 달린 클래스 구성원이 삽입됩니다.@AndroidEntryPoint
주석supports injection은 활동, 프래그먼트, 보기, 서비스 및 BroadcastReceivers와 같은 일부 기본 시스템 클래스에만 적용됩니다. 그러나 주사는 당신에게 마법입니다. 시스템 클래스를 주입하는 것을 볼 수 없습니다. 시스템 클래스(또는 사용자가 인스턴스화하지 않은 모든 항목)를 만났지만 주입해야 하는 경우 어떻게 됩니까?(Jetpack의 라이브러리에서) 내
Initializer
클래스를 삽입해야 한다는 사실을 알게 되었을 때 Hilt로 마이그레이션할 때 직면한 상황입니다. 여기에서 사용자 지정 진입점이 작동합니다.진입점 인터페이스
제어할 수 없는 클래스에 대해 무엇
@Inject
을 하시겠습니까? 이@EntryPoint
주석 인터페이스에 "접속자"메소드를 추가하여 인스턴스를 가져옵니다.@EntryPoint
@InstallIn(SingletonComponent::class)
interface InitializerEntryPoint {
fun myHelper(): MyHelper
}
주입된 인스턴스가 속한 동일한 항목component에 이것을 "설치"해야 한다는 점에 유의하십시오. 따라서 활동 범위 및 싱글톤 범위일 수 있는 인스턴스가 필요한 경우 둘 이상의 진입점 인터페이스가 필요할 수 있습니다.
진입점 인터페이스를 어디에 추가합니까?
official docs 에 따르면 이상적으로 이러한 인터페이스는 제공하는 개체가 아니라 사용되는 개체에 가까워야 합니다. 예를 들어 Jetpack의 앱 시작
Initializer
예제에서 이러한 인터페이스는 이니셜라이저 내부에 정의되어야 합니다.class MyCoolInitializer : Initializer<Unit> {
[...]
@EntryPoint
@InstallIn(SingletonComponent::class)
interface InitializerEntryPoint {
fun myHelper(): MyHelper
}
}
이것은 이러한 진입점 인터페이스가
@Inject
-ed될 수 없는 특수한 경우 클래스에 대해서만 존재한다는 것을 분명히 하기 위한 것입니다. 다른 모든 경우에는 표준@Inject
및 @AndroidEntryPoint
주석을 사용해야 합니다.사용 방법
마지막으로 이러한 진입점 인터페이스를 사용하려면 정적 Hilt 메서드를 사용하고 해당 "접근자"메서드에 액세스하여 인스턴스를 가져옵니다!
val myHelper = EntryPoints.get(applicationContext, InitializerEntryPoint::class.java).myHelper()
즐거운 코딩하세요!
Reference
이 문제에 관하여(Hilt: 맞춤 진입점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rockandnull/hilt-custom-entry-points-ppl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)