Skip to content

Hilt_도입_과정에서의_오류

yujin45 edited this page Nov 7, 2024 · 1 revision

💥 Hilt 도입 중 발생한 오류들

문제

ViewModel에서 Repository를 **@Inject**로 주입해주는 과정에서 다음과 같은 에러 발생

hilt cannot be provided without an @Provides-annotated method

원인

Repository 관련 모듈을 생성해주지 않아서 생긴 문제

해결 방법

HiltModule에 Repository 등록

@Singleton
@Provides
fun providerRepository(
    ...
): DataRepository = DataRepositoryImpl(...)

문제2

Compose에서 ViewModel 주입하는 과정에서의 에러

java.lang.RuntimeException: Cannot create an instance of class

원인

Hilt로 주입 받는 ViewModel에서 viewModel()로 선언

viewModel()에서 주입하는 과정

@Suppress("MissingJvmstatic")
@Composable
public inline fun <reified VM : ViewModel> viewModel(
    viewModelStoreOwner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) {
        "No ViewModelStoreOwner was provided via LocalViewModelStoreOwner"
    },
    key: String? = null,
    factory: ViewModelProvider.Factory? = null,
    extras: CreationExtras = if (viewModelStoreOwner is HasDefaultViewModelProviderFactory) {
        viewModelStoreOwner.defaultViewModelCreationExtras
    } else {
        CreationExtras.Empty
    }
): VM = viewModel(VM::class, viewModelStoreOwner, key, factory, extras)

위와 같이 viewModel()로 주입하게 되면 생성자가 없는 기본 팩토리로 ViewModel을 생성하기 때문에 생성자가 있는 ViewModel에서는 에러가 발생하게 된다.

해결 방법

Compose에서 Hilt로 주입 받는 ViewModel을 사용할 때엔 hiltViewModel() 을 사용

Clone this wiki locally