Heron Basquiat
Heron Basquiat

Reputation: 1

Unresolved reference DaggerApplicationComponent when trygin to build app component

I'm usign Android Studio 2022.3.1 Patch 2, I'm trying to create my app component, but Dagger does not generate my app component. Here it is the MainApplication.kt

class MainApplication : Application() {

    val applicationComponent: ApplicationComponent =
        DaggerApplicationComponent.builder().applicationModule(ApplicationModule(this)).build()

    @Inject
    lateinit var indoor: Indoor

    override fun onCreate() {
        super.onCreate()
        applicationComponent.inject(this)
    }
}

And my ApplicationComponent

import dagger.Component
import javax.inject.Singleton

@Singleton
@Component(modules = [ApplicationModule::class])
interface ApplicationComponent {
    @ApplicationContext
    fun context(): Context
    fun application(): Application
    fun  inject(application: MainApplication)
}

Also in my build.graddle, the dependencies looks like this

//Dagger
    implementation("com.google.dagger:dagger:2.48.1")
    implementation("com.google.dagger:dagger-android-support:2.48.1") 
    annotationProcessor("com.google.dagger:dagger-android-processor:2.48.1")
    annotationProcessor("com.google.dagger:dagger-compiler:2.48.1")

I tried using

kapt "com.google.dagger:dagger-compiler:2.x.x

But it didnt work

Edit: This is my ApplicationModule code

import dagger.Module

import dagger.Provides import javax.inject.Singleton

@Module class ApplicationModule (private val application: Application) {

@Provides
@ApplicationContext
fun provideContext(): Context = application

@Provides
fun provideApplication(): Application = application

Upvotes: 0

Views: 98

Answers (1)

hi.cosmonaut
hi.cosmonaut

Reputation: 163

Try this for your ApplicationModule

@Module 
class ApplicationModule (private val application: Application) {

@Provides
fun provideApplication(): Application = application

}

Double check if Indoor class has @Inject annotated constructor:

class Indoor @Inject constructor(...){
    ...
}

And ApplicationComponent :

@Singleton
@Component(modules = [ApplicationModule::class])
interface ApplicationComponent {
    fun inject(application: MainApplication)
}

ALSO You can pass Indoor into object graph by ApplicationModule

@Module 
class ApplicationModule (private val application: Application) {

@Provides
fun provideApplication(): Application = application
    
@Provides
//@Singleton
fun provideIndoor(application: Application) = Indoor(application)

}

Upvotes: 1

Related Questions