我正在使用 Android Studio 2022.3.1 Patch 2,我正在尝试创建我的应用程序组件,但 Dagger 没有生成我的应用程序组件。这是 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)
}
}
还有我的应用程序组件
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)
}
也在我的 build.graddle 中,依赖项如下所示
//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")
我尝试使用
kapt“com.google.dagger:dagger-compiler:2.x.x
但是没用
编辑:这是我的应用程序模块代码
import dagger.Module
进口匕首。提供 导入 javax.inject.Singleton
@模块 类ApplicationModule(私有val应用程序:应用程序){
@Provides
@ApplicationContext
fun provideContext(): Context = application
@Provides
fun provideApplication(): Application = application
为您的
ApplicationModule
尝试一下这个
@Module
class ApplicationModule (private val application: Application) {
@Provides
fun provideApplication(): Application = application
}
仔细检查
Indoor
类是否有 @Inject
带注释的构造函数:
class Indoor @Inject constructor(...){
...
}
还有
ApplicationComponent
:
@Singleton
@Component(modules = [ApplicationModule::class])
interface ApplicationComponent {
fun inject(application: MainApplication)
}
还有 您可以通过
Indoor
将
ApplicationModule
传递到对象图中
@Module
class ApplicationModule (private val application: Application) {
@Provides
fun provideApplication(): Application = application
@Provides
//@Singleton
fun provideIndoor(application: Application) = Indoor(application)
}