I need to @Inject
constructor activity
and fragmentManager
into my Navigator.class
. But I'm getting this error:
AppCompatActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
I've read all similar questions on Stackoverflow. I did everything they suggested, but didn't find the answer.
Navigator.class
@Singleton
class Navigator @Inject constructor(private val activity: AppCompatActivity,
private val fragmentManager: FragmentManager)
BaseActivity.class
abstract class BaseActivity: AppCompatActivity(), HasSupportFragmentInjector{
@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>
@Inject
lateinit var navigator: Navigator
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
}
override fun supportFragmentInjector() = fragmentInjector
BaseModule.class
@Module
abstract class BaseActivityModule {
@Module
companion object {
@JvmStatic
@Provides
@Named(ACTIVITY_FRAGMENT_MANAGER)
@PerActivity
fun activityFragmentManager(activity: AppCompatActivity): FragmentManager =
activity.supportFragmentManager
}
@Binds
@PerActivity
abstract fun activity(appCompatActivity: AppCompatActivity): Activity
@Binds
@PerActivity
abstract fun activityContext(activity: Activity): Context
MainActivityModule.class
@Module(includes = [
BaseActivityModule::class
])
abstract class MainActivityModule {
@Binds
@PerActivity
abstract fun appCompatActivity(mainActivity: MainActivity): AppCompatActivity
AppModule.class
@Module(includes = [AndroidSupportInjectionModule::class])
abstract class AppModule {
@Binds
@Singleton
abstract fun application(app: App): Application
@PerActivity
@ContributesAndroidInjector(modules = [MainActivityModule::class])
abstract fun mainActivityInjector(): MainActivity