Не удается найти классы DaggerAppComponent и AppComponent в Android Dagger 2 - PullRequest
0 голосов
/ 21 сентября 2019

Я занимаюсь разработкой приложения для Android с использованием Android Studio и Kotlin.Я добавляю контрольно-измерительные приборы в свой проект.Сейчас я пытаюсь внедрить фиктивные зависимости в объекты, используя 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.Похоже, класс не входит в пакет.

enter image description here

Чего не хватает в моей установке и как я могу это исправить?

1 Ответ

3 голосов
/ 21 сентября 2019

Я использую следующие зависимости gradle для Dagger: - В файле 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

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

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)``

Я надеюсь, что это решит вашу проблему

...