So I'm trying to migrate my whole app from dagger to hilt and apparently I'm unable to inject activities and fragments.
My Activities:
@AndroidEntryPoint()
class MainActivity : AuthorizedFlowActivity<ActivityMainBinding>(), MainActivityUiEventHandler,
MainActivityBottomSheetBehavior,
MainActivityOpenDrawer {
My fragments:
@AndroidEntryPoint
class ProfileFragment : BaseFragment<FragmentCaptainProfileBinding>() {
My Application Class:
@HiltAndroidApp
class App : Application() {
Injecting my activities like this:
class SplashActivityNavigatorImpl @Inject constructor(
splashActivity: SplashActivity,
private val preferences: JameelPreferences
)
And it's throwing this error:
error: [Dagger/MissingBinding] com.abc.presentation.main.activities.MainActivity cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.
Project Level Gradle:
classpath "com.google.dagger:hilt-android-gradle-plugin:$libVersion.hiltVersion"
App Level Gradle (all 3 modules):
id("dagger.hilt.android.plugin")
implementation "com.google.dagger:hilt-android:$libVersion.hiltVersion"
kapt "com.google.dagger:hilt-android-compiler:$libVersion.hiltCompilerVersion"
Could it be that my activities and fragments are extending bases which cannot be annotated by the @AndroidEntryPoint because they have type parameters?? HELP!
Also with dagger2, I was using interfaces like:
@Module
abstract class AppActivitiesInjector {
@ActivityScope
@ContributesAndroidInjector(modules = [RiderInviteFriendFragmentsInjector::class, RiderInviteActivityModule::class, BaseActivityModule::class])
abstract fun provideRiderInviteFriendActivity(): RiderInviteFriendActivity
@ActivityScope
@ContributesAndroidInjector(modules = [OffersActivityFragmentsInjector::class, OffersActivityModule::class, BaseActivityModule::class])
abstract fun provideOffersActivity(): OffersActivity
@ActivityScope
@ContributesAndroidInjector(modules = [TripsHistoryActivityFragmentsInjector::class, TripsHistoryActivityModule::class, BaseActivityModule::class])
abstract fun provideTripsActivity(): TripsHistoryActivity
@ActivityScope
@ContributesAndroidInjector(modules = [RiderProfileActivityFragmentsInjector::class, RiderProfileActivityModule::class, BaseActivityModule::class])
abstract fun provideRiderProfileActivity(): RiderProfileActivity
@ActivityScope
@ContributesAndroidInjector(modules = [PaymentActivityModule::class, PaymentActivityFragmentsInjector::class, BaseActivityModule::class])
abstract fun providePaymentActivity(): PaymentActivity
}
And it was working, but hilt is supposedly to reduce such boiler plate? right?
Thanks