Hilt: Android용 DI 프레임워크에 대한 가장 짧은 가이드
저는 한동안 강력하면서도 단순한 종속성 주입 프레임워크(DI)를 찾고 있었습니다. 주위를 둘러본 결과 Koin이 이러한 요구 사항을 충족하는 DI 프레임워크라는 결론을 내렸습니다(물론 제 필요에 따라).
내 생각에 Dagger은 Android의 사실상의 DI 프레임워크이며 강력하고 대중적이지만 단순하다고 할 수는 없습니다. 그런 다음 Hilt이 돌아 왔습니다. 어느 것이 스위트 스팟을 쳤습니다. 거의 Dagger(모든 속도와 컴파일 시간 안전성을 갖추고 있음)이지만 빠르고 쉬운 것으로 개조되었습니다.
귀하의 프로젝트에서 Hilt를 사용하는 방법에 대한 매우 빠른 개요를 제공하려고 노력할 것입니다. 기존 프로젝트 중 하나에서 작업을 수행했으며 빠르게 시작할 수 있어 기뻤습니다.
설정
Hilt는 백그라운드에서 많은 "마술"(예: 코드 생성)을 수행하기 때문에 사용하기 쉽습니다. 이렇게 하려면 해당 주석 프로세서 및 기타 종속 항목을
build.gradle
파일에 추가해야 합니다.꽤 많은 추가가 필요하므로 official doc을 참조하십시오.
종속성
클래스를 주입 가능하게 만들려면 생성자에
@Inject
주석을 달기만 하면 됩니다.class MyHelper @Inject constructor() {
[...]
}
이것이 주입될 때마다 새 인스턴스가 생성됩니다. (처음 생성될) 동일한 단일 인스턴스를 주입하려면
@Singleton
로 주석을 추가합니다.@Singleton
class MyHelper @Inject constructor() {
[...]
}
보기/프래그먼트/활동/보기 모델에 대한 범위 지정도 사용할 수 있습니다( doc ). 이는 주입이 요청될 때 동일한 구성 요소에 있는 경우 동일한 인스턴스가 반환됨을 의미합니다. 예를 들어 다음 클래스는 새 Fragment에서 요청할 때마다 생성됩니다.
@FragmentScoped
class MyHelper @Inject constructor() {
[...]
}
모듈
인터페이스와 구현이 있는 경우 모듈이 필요합니다. 클래스를 인스턴스화하는 방법에 대한 지침으로 생각하십시오. 간단한 인터페이스/구현용
@Binds
.@InstallIn(ApplicationComponent::class)
abstract class MyHelperModule {
@Binds
abstract fun bindMyHelper(myHelperImpl: MyHelperImpl): MyHelper
}
더 복잡한 "명령"을 사용하려면
@Provides
를 사용하십시오. Context
또는 @ApplicationContext
로 주석을 달면 기본적으로 @ActivityContext
가 제공됩니다.@Module
@InstallIn(ApplicationComponent::class)
object MyHelperModule {
@Provides
fun provideMyHelper(
@ApplicationContext context: Context
) {
[...]
return MyHelper(context)
}
}
Where you
@InstallIn
는 위에서 본 범위 지정 주석과 함께 클래스의 새 인스턴스가 생성되고 제공되는 시기를 정의합니다. 예를 들어, 이를 요청하는 각 MyHelper
에 대해 Activity
의 새 인스턴스를 생성합니다.@Module
@InstallIn(ActivityComponent::class)
abstract class MyHelperModule {
@ActivityScoped
@Binds
abstract fun bindMyHelper(myHelper: MyHelperImpl): MyHelper
}
의존성 주입
이제 종속성이 무엇인지 정의했습니다. 주입하고 사용할 때입니다.
인스턴스화할 수 있는 클래스의 경우
@Inject
를 사용하여 생성자 주입을 사용합니다(위에서 본 것처럼).class MyHelper @Inject constructor(private val toBeInjected: AnotherHelper) {
[...]
}
귀하가 인스턴스화하지 않은 시스템 클래스(예: 활동, 프래그먼트, 서비스)의 경우
@AndroidEntryPoint
, @Inject
및 lateinit
를 사용하여 멤버 주입을 사용하십시오.@AndroidEntryPoint
class MyActivity : AppCompatActivity() {
@Inject lateinit var myHelper: MyHelper
[...]
}
모델 보기
Jetpack
ViewModel
을 주입하려면 다른 것이 필요합니다.먼저 다음additional dependencies을 설치합니다.
그런 다음 생성자에서 일반
@ViewModelInject
대신 @Inject
를 사용합니다. 를 주입하려면 @Assisted
로 주석을 추가합니다. 마지막으로 ViewModel
팩토리가 필요하지 않습니다. by viewModels()
를 사용하여 Fragment/Activity에서 ViewModel
를 검색하십시오.class MyViewModel @ViewModelInject constructor(
@Assisted private val savedState: SavedStateHandle,
private val myHelper: MyHelper,
) : ViewModel() {
[...]
}
이 짧은 게시물에서 Hilt와 사용 방법을 엿볼 수 있기를 바랍니다. 더 많은 사용 사례를 보려면 doc을 자세히 살펴보십시오. 즐거운 코딩하세요!
Reference
이 문제에 관하여(Hilt: Android용 DI 프레임워크에 대한 가장 짧은 가이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rockandnull/hilt-the-shortest-guide-for-the-di-framework-for-anroid-5b0k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)