【发布时间】:2021-04-29 14:36:21
【问题描述】:
我试图将一个简单的 viewModel 交给一个可组合的,并在每次出现此错误时都会收到此错误,但我不知道这意味着什么:
java.lang.IllegalStateException: Given component holder class com.example.app.MainActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager
我的摇篮:
implementation("androidx.hilt:hilt-navigation:1.0.0-beta01")
implementation("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03")
我创建了一个BaseApplication 文件
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class BaseApplication: Application()
并将其设置在 Manifest 中。
我创建了一个AppModule 文件:
import android.content.Context
import com.veloce.montageservice.BaseApplication
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Singleton
@Provides
fun provideApplication(@ApplicationContext app: Context): BaseApplication {
return app as BaseApplication
}
}
然后在我的MainActivity 中设置@HiltAndroidApp 并创建一个viewModel,如下所示:
@HiltViewModel
class TaskViewModel: ViewModel() {
//code
}
viewModel 在我的导航中被调用 MainActivity:
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screens.LoginScreen.route
) {
composable(Screens.ActiveMontageScreen.route) { navBackStackEntry ->
activeTask?.let {
val factory =
HiltViewModelFactory(LocalContext.current, navBackStackEntry)
val viewModel: TaskViewModel = viewModel("taskViewModel", factory)
ActiveMontageScreen(
viewModel = viewModel,
task = it,
navigation = navController,
context = LocalContext.current
) {
removeActiveTask()
}
}
}
}
我真的看不出有什么问题,但是我对 Hilt 和 Android 开发非常缺乏经验。 有谁知道问题出在哪里?
【问题讨论】:
标签: android kotlin android-jetpack-compose dagger-hilt