lateinit 属性 androidInjector 尚未初始化 Dagger 2

lateinit property androidInjector has not been initialized Dagger 2

我有这样的应用程序

class App : Application() , HasAndroidInjector {

    lateinit var application: Application

    @Inject
    lateinit var androidInjector : DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

    override fun onCreate() {
        super.onCreate()
        this.application = this
    }
}

然后我有 AppComponent

@Singleton
@Component(
    modules = [
        AndroidSupportInjectionModule::class,
        LoginModule::class
    ]
)
interface AppComponent : AndroidInjector<App> {

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance application: App): AppComponent
    }
}

登录模块是这个

@Module
abstract class LoginModule {

    @ContributesAndroidInjector(modules = [LoginDependencies::class])
    abstract fun bindLoginFragment(): LoginFragment
}

并且在 FragmentonViewCreated 中我使用

AndroidSupportInjection.inject(this)

我也试过将它添加到 onAttach() 但它不起作用。添加

后它开始崩溃
@Inject
lateinit var loginPresenter: LoginContract.Presenter

如果我删除它,它说的和问题一样,如果我离开演示者,它说预置器没有被初始化。

我遗漏了什么吗?

编辑

我在哪里收到这个错误

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property androidInjector has not been initialized

override fun androidInjector(): AndroidInjector<Any> = androidInjector

那我也明白了

at com.testing.login.login.presentation.LoginFragment.onRequestInjection(LoginFragment.kt:31)

AndroidSupportInjection.inject(this)

这个 onRequestInjectiononViewCreated 中的 AbstractFragment 我也试过把它放在 onAttach() 但没有任何改变。

我的 build.gradle 包含:

这个在 :app

    api(LibrariesDependencies.DAGGER)
    api(LibrariesDependencies.DAGGER_ANDROID)
    api(LibrariesDependencies.DAGGER_ANDROID_SUPPORT)
    kapt LibrariesDependencies.DAGGER_ANDROID_KAPT
    kapt LibrariesDependencies.DAGGER_KAPT
    kapt LibrariesDependencies.DAGGER_ANNOTATION_PROCESSOR

以及:登录

api(LibrariesDependencies.DAGGER)
    api(LibrariesDependencies.DAGGER_ANDROID)
    api(LibrariesDependencies.DAGGER_ANDROID_SUPPORT)
    kapt LibrariesDependencies.DAGGER_ANDROID_KAPT
    kapt LibrariesDependencies.DAGGER_KAPT
    kapt LibrariesDependencies.DAGGER_ANNOTATION_PROCESSOR

未初始化的属性是否发生在Appclass中? 如果是这样,这可能意味着您在 App class.

onCreate 方法中缺少以下内容
DaggerAppComponent
            .factory()
            .create(this)
            .inject(this)

在您的应用程序 class 中,您定义了一个 @Inject 属性,但您没有在任何地方初始化它。您需要做的是:首先将 App 声明为 入口点 用于 Dagger-Android 用途:

interface AppComponent : AndroidInjector<App> {

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance application: App): AppComponent
    }

    fun inject(app: App) // Let Dagger know your Application class with root dispatching injector
}

然后实际创建 AppComponent 实例并将其用于 bootstrap Dagger 并注入 DispatchingAndroidInjector 实例:

override fun onCreate() {
  super.onCreate()
  this.application = this

  DaggerAppComponent.factory().create(this).inject(this)
}