Не получается заинжектить Context dagger2
Есть компонент AppComponent:
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
NetworkModule::class,
LoginActivityModule::class,
BottomNavigationActivityModule::class,
DetailsActivityModule::class,
PersonDetailsActivityModule::class,
MovieListActivityModule::class
]
)
interface AppComponent : AndroidInjector<BaseApp>{
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
override fun inject(baseApp: BaseApp)
}
AppModule:
@Module
class AppModule {
@Provides
fun provideAppContext(app: BaseApp): Context {
return app.applicationContext
}
}
BaseApp:
class BaseApp : DaggerApplication() {
private val applicationInjector = DaggerAppComponent.builder()
.application(this)
.build()
override fun applicationInjector(): AndroidInjector<out DaggerApplication> = applicationInjector
}
SearchRepository:
class SearchRepository @Inject constructor(private val apiService: TMDBApiService, private val context: Context) { ... }
Проблема в том, что контекст не инжектится, и я не могу понять почему, и как исправить. В логах такая ошибка:
com.voak.android.tmdbmovies.BaseApp cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.
Если из репозитория убрать контекст, то апи прекрасно инжектится.
Ответы (1 шт):
Автор решения: IR42
→ Ссылка
Либо в fun provideAppContext(app: BaseApp): Context поменяйте BaseApp на Application, либо в fun application(application: Application): Builder поменяйте Application на BaseApp.
А вообще dagger.android устарел, используйте dagger.hilt