如何解决在 android 中实现 Dagger 2 时丢失的 InjectedFieldSignature 错误?
How to solve missing InjectedFieldSignature Error implementing Dagger 2 in android?
在使用 dagger 2 之前,我已经在 android 中实现了依赖注入,但是最近,我试图在一个新项目中使用它,但是我得到了以下错误:
error: cannot find symbol
import dagger.internal.InjectedFieldSignature;
^
symbol: class InjectedFieldSignature
location: package dagger.internal/location/to/App_MembersInjector.java:30: error: cannot find symbol
这是我的应用程序组件:
@Singleton
@Component(
modules = [
(AndroidInjectionModule::class),
(VmModule::class),
(InjectorModule::class),
]
)
interface ApplicationComponent: AndroidInjector<Application> {
@Component.Builder
interface Builder{
@BindsInstance
fun application(application: App): Builder
fun build() : ApplicationComponent
}
fun inject(home: Home)
}
然后在我的应用程序中 class:
class App: Application(), HasAndroidInjector {
@Inject
lateinit var anAndroidInjector: DispatchingAndroidInjector<Any>
override fun onCreate() {
super.onCreate()
DaggerApplicationComponent.builder().application(this).build().inject(this)
}
override fun androidInjector(): AndroidInjector<Any> {
return anAndroidInjector
}
}
然后是注入器模块:
@Module
abstract class InjectorModule {
@ContributesAndroidInjector
abstract fun bindHomeActivity(): Home
}
以下是我的应用程序Gradle的一小段摘录,以展示匕首版本:
implementation 'com.google.dagger:dagger-android:2.24'
implementation 'com.google.dagger:dagger-android-support:2.24'
kapt 'com.google.dagger:dagger-android-processor:2.24'
kapt 'com.google.dagger:dagger-compiler:2.28'
如果您有任何线索,请告诉我问题出在哪里。
您的 Dagger 神器版本不匹配。具体来说,您使用 dagger-compiler:2.28
生成代码,但包含对 Dagger 2.24 的依赖。
在 dagger.internal.InjectedFieldSignature
的特定情况下,class 似乎已在 Dagger 版本 2.25.3 中引入。任何更高版本的 Dagger 编译器都期望 InjectedFieldSignature
存在并且可以在生成的代码中使用。但是,由于您只在项目中包含 Dagger 2.24,因此生成的代码最终引用了一个不存在的 class。
要解决此问题,请确保所有 Dagger 依赖项都使用相同的版本。
在使用 dagger 2 之前,我已经在 android 中实现了依赖注入,但是最近,我试图在一个新项目中使用它,但是我得到了以下错误:
error: cannot find symbol import dagger.internal.InjectedFieldSignature; ^ symbol: class InjectedFieldSignature location: package dagger.internal/location/to/App_MembersInjector.java:30: error: cannot find symbol
这是我的应用程序组件:
@Singleton
@Component(
modules = [
(AndroidInjectionModule::class),
(VmModule::class),
(InjectorModule::class),
]
)
interface ApplicationComponent: AndroidInjector<Application> {
@Component.Builder
interface Builder{
@BindsInstance
fun application(application: App): Builder
fun build() : ApplicationComponent
}
fun inject(home: Home)
}
然后在我的应用程序中 class:
class App: Application(), HasAndroidInjector {
@Inject
lateinit var anAndroidInjector: DispatchingAndroidInjector<Any>
override fun onCreate() {
super.onCreate()
DaggerApplicationComponent.builder().application(this).build().inject(this)
}
override fun androidInjector(): AndroidInjector<Any> {
return anAndroidInjector
}
}
然后是注入器模块:
@Module
abstract class InjectorModule {
@ContributesAndroidInjector
abstract fun bindHomeActivity(): Home
}
以下是我的应用程序Gradle的一小段摘录,以展示匕首版本:
implementation 'com.google.dagger:dagger-android:2.24'
implementation 'com.google.dagger:dagger-android-support:2.24'
kapt 'com.google.dagger:dagger-android-processor:2.24'
kapt 'com.google.dagger:dagger-compiler:2.28'
如果您有任何线索,请告诉我问题出在哪里。
您的 Dagger 神器版本不匹配。具体来说,您使用 dagger-compiler:2.28
生成代码,但包含对 Dagger 2.24 的依赖。
在 dagger.internal.InjectedFieldSignature
的特定情况下,class 似乎已在 Dagger 版本 2.25.3 中引入。任何更高版本的 Dagger 编译器都期望 InjectedFieldSignature
存在并且可以在生成的代码中使用。但是,由于您只在项目中包含 Dagger 2.24,因此生成的代码最终引用了一个不存在的 class。
要解决此问题,请确保所有 Dagger 依赖项都使用相同的版本。