Hilt_도입_과정에서의_오류 - boostcampwm-2024/and04-Nature-Album GitHub Wiki
💥 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()
을 사용