简体   繁体   English

如何解决在 android 中实现 Dagger 2 时缺少的 InjectedFieldSignature 错误?

[英]How to solve missing InjectedFieldSignature Error implementing Dagger 2 in android?

I have implemented dependency injection in android before using dagger 2 but, recently, I have tried to use it in a new project but I get the following error:在使用 dagger 2 之前,我已经在 android 中实现了依赖注入,但是最近,我尝试在一个新项目中使用它,但出现以下错误:

error: cannot find symbol import dagger.internal.InjectedFieldSignature;错误:找不到符号导入 dagger.internal.InjectedFieldSignature; ^ symbol: class InjectedFieldSignature location: package dagger.internal/location/to/App_MembersInjector.java:30: error: cannot find symbol ^ 符号:类 InjectedFieldSignature 位置:包 dagger.internal/location/to/App_MembersInjector.java:30:错误:找不到符号

Here is my Application component:这是我的应用程序组件:

@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)
}

Then in my App class:然后在我的 App 类中:

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
}

}

Then the injector module:然后是注入器模块:

@Module
abstract class InjectorModule {
  @ContributesAndroidInjector
  abstract fun bindHomeActivity(): Home
}

The following is a small excerpt of my app Gradle to show the dagger version:以下是我的应用程序 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'

If you have any clue, kindly let me know where the problem might be.如果您有任何线索,请告诉我问题可能出在哪里。

Your Dagger artifact versions don't match.您的 Dagger 工件版本不匹配。 Specifically, you are using dagger-compiler:2.28 to generate code, but including an dependency on Dagger 2.24 instead.具体来说,您使用dagger-compiler:2.28来生成代码,但包含对 Dagger 2.24 的依赖。

In the specific case of dagger.internal.InjectedFieldSignature , that class appears to have been introduced in Dagger version 2.25.3.dagger.internal.InjectedFieldSignature的特定情况下,该类似乎已在 Dagger 版本 2.25.3 中引入。 Any later version of the Dagger compiler will expect that InjectedFieldSignature exists and can be used in generated code.任何更高版本的 Dagger 编译器都会期望InjectedFieldSignature存在并且可以在生成的代码中使用。 However, since you're only including Dagger 2.24 in your project, the generated code ends up referring to a class that doesn't exist.但是,由于您的项目中只包含 Dagger 2.24,因此生成的代码最终会引用一个不存在的类。

To fix this, make sure all of your Dagger dependencies use the same version.要解决此问题,请确保所有 Dagger 依赖项都使用相同的版本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM