I'm developing an app with a dynamic features that saves user's favorites, and I'm using Hilt for injection.
But I got this error:
java.lang.IllegalStateException: Given component holder class com.rmaprojects.favorite.presentation.FavoriteFragment does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager
at dagger.hilt.EntryPoints.get(EntryPoints.java:62)
at dagger.hilt.android.EntryPointAccessors.fromFragment(EntryPointAccessors.kt:66)
at com.rmaprojects.favorite.presentation.FavoriteFragment.onAttach(FavoriteFragment.kt:38)
What I've done:
Created @Component:
@Component(
dependencies = [FavoriteModuleDependencies::class]
)
interface FavoriteComponent {
fun inject(fragment: FavoriteFragment)
@Component.Builder
interface Builder {
fun context(@BindsInstance context: Context): Builder
fun appDependencies(favoriteModuleDependencies: FavoriteModuleDependencies): Builder
fun build(): FavoriteComponent
}
}
Created Module for @EntryPoint:
@EntryPoint
@InstallIn(SingletonComponent::class)
interface FavoriteModuleDependencies {
fun phonePediaUseCases(): PhonePediaUseCases
}
Applied component builder in the Fragment:
class FavoriteFragment: Fragment(R.layout.fragment_favorite) {
@Inject
lateinit var factory: ViewModelFactory
private val viewModel: FavoriteViewModel by viewModels {
factory
}
override fun onAttach(context: Context) {
super.onAttach(context)
DaggerFavoriteComponent.builder()
.context(requireActivity().applicationContext)
.appDependencies(
EntryPointAccessors.fromFragment(
this,
FavoriteModuleDependencies::class.java
)
)
.build()
.inject(this)
}
Any solution with this? Any help will be appreciated
I solved this a minute ago by simply changing the EntryPointAccessors.fromFragment() into *.fromApplication() (Change requireContext() into requireActivity().application)