首页 > 解决方案 > 在 Android Dagger 2 中找不到 DaggerAppComponent 和 AppComponent 类

问题描述

我正在使用 Android Studio 和 Kotlin 开发一个 Android 应用程序。我正在将仪器测试添加到我的项目中。我现在要做的是尝试在我的测试中使用 Dagger 2 将模拟依赖项注入到对象中。我正在关注本教程,https://code.luasoftware.com/tutorials/android/setup-dagger2-for-android-kotlin/。我通过在我的应用程序 gradle 依赖项部分添加它来安装所需的依赖项。

implementation 'com.google.dagger:dagger:2.15'
    kapt 'com.google.dagger:dagger-compiler:2.15'
    provided 'javax.annotation:jsr250-api:1.0'
    kapt "com.google.dagger:dagger-android-processor:2.15"
    implementation "com.google.dagger:dagger-android:2.15"
    implementation "com.google.dagger:dagger-android-support:2.15"

然后我在依赖项部分之前添加了以下代码段

kapt {
    generateStubs = true
}

我也添加了这个。

apply plugin: 'kotlin-kapt'

然后在我的自定义应用程序类中,我尝试使用 DaggerAppComponent 类。好像这个类没有随包一起提供。

在此处输入图像描述

我的安装中缺少什么以及如何修复它?

标签: androiddependency-injectiondagger-2android-instrumentation

解决方案


我对 Dagger 使用以下 gradle 依赖项:- 在 version.gradle 文件中

    def dagger = [:]
dagger.runtime = "com.google.dagger:dagger:2.24"
dagger.android = "com.google.dagger:dagger-android::2.24"
dagger.android_support = "com.google.dagger:dagger-android-support::2.24"
dagger.compiler = "com.google.dagger:dagger-compiler::2.24"
dagger.android_support_compiler = "com.google.dagger:dagger-android-processor::2.24"

deps.dagger = dagger

app 模块的 build.gradle 使用以下代码:-

implementation deps.dagger.runtime
implementation deps.dagger.android
implementation deps.dagger.android_support

kapt deps.dagger.android_support_compiler
kapt deps.dagger.compiler

请创建一个`MyApplicationAppInjector 类

class MyApplicationAppInjector : AppInjector()  {
fun init(app: ApplicationController) {
    DaggerMyAppComponent.builder().application(app)
            .build().inject(app)
    app.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
            handleActivity(activity as AppCompatActivity)
        }

        override fun onActivityStarted(activity: Activity) {

        }

        override fun onActivityResumed(activity: Activity) {

        }

        override fun onActivityPaused(activity: Activity) {

        }

        override fun onActivityStopped(activity: Activity) {

        }

        override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {

        }

        override fun onActivityDestroyed(activity: Activity) {

        }
    })
}
}

创建 MyAppComponent 接口为:-

 @SuppressWarnings("unchecked")
@Singleton
@Component(
        modules = [
            AndroidInjectionModule::class,
)
interface MyAppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): MyAppComponent
    }

    fun inject(app: ApplicationController)
}

创建一个类

open class AppInjector {
fun handleActivity(activity: AppCompatActivity) {
    if (activity is HasAndroidInjector) {
        AndroidInjection.inject(activity)
    }
    activity.supportFragmentManager
            .registerFragmentLifecycleCallbacks(
                    object : FragmentManager.FragmentLifecycleCallbacks() {
                        override fun onFragmentCreated(
                                fm: FragmentManager,
                                f: Fragment,
                                savedInstanceState: Bundle?
                        ) {

                                AndroidSupportInjection.inject(f)

                        }
                    }, true
            )
}

}

并在您的应用程序类的 onCreate() 方法中使用此代码:-

`MyApplicationAppInjector().init(this)``

我希望它能解决你的问题


推荐阅读