Компонент Dagger 2 не создан

Чтобы добавить к тому, что ответил Мигель Пин, вот другой раздел из документации , который также отвечает на это:

Короткая версия: используйте ApplicationContext, если у вас нет действительно хорошая причина для этого. Для тех из вас, кто ищет немного большую глубину в отношении «но почему» вышеупомянутой рекомендации, продолжайте читать.

(разместите это для любых будущих новичков, которые могут прочитать этот вопрос )

29
задан ghita 3 May 2017 в 09:55
поделиться

9 ответов

При разработке на Kotlin вы должны добавить следующие строки рядом с annotationProcessor их аналогами:

kapt 'com.google.dagger:dagger-android-processor:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'

и добавить apply plugin: 'kotlin-kapt' в начале того же файла.

Этот раздел выглядит для меня так:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' // <- Add this line
apply plugin: 'io.fabric'
59
ответ дан Gonzalo 3 May 2017 в 09:55
поделиться

Если у вас есть несколько модулей в AndroidStudio (модули в терминах Android Studio, а не Dagger), другой возможной причиной сбоя является то, что вы забыли поместить процессоры аннотаций во все модули »build.gradle.

Мы разделили наше приложение на несколько модулей, обновили зависимости от использования implementation до использования api, но забыли соответствующим образом обработать процессоры аннотаций.

Итак, вы можете иметь эти строки только в корневом модуле:

api 'com.google.dagger:dagger-android:2.16'
// if you use the support libraries
api 'com.google.dagger:dagger-android-support:2.16'

Но эти должны быть указаны во всех зависимостях модулей:

annotationProcessor 'com.google.dagger:dagger-compiler:2.16'
// if you use injections to Android classes
annotationProcessor 'com.google.dagger:dagger-android-processor:2.16'
2
ответ дан Gaket 3 May 2017 в 09:55
поделиться

Вот решение для нового проекта Dagger.

Эти две строки отвечают за создание структуры времени компиляции в Dagger 2.

compile 'com.google.dagger:dagger:2.14.1' // создает структуру во время компиляции annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1' // создает структуру во время компиляции на основе аннотации, которые вы предоставили.

Полная настройка Dagger

        //dagger 2
        compile 'com.google.dagger:dagger:2.14.1'
        annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'

        //to enable DaggerActivity, DaggerBroadcastReceiver, DaggerFragment etc classes
        compile 'com.google.dagger:dagger-android:2.14.1'
        annotationProcessor 'com.google.dagger:dagger-android-processor:2.14.1'

        //support libraries with dagger 2
        compile 'com.google.dagger:dagger-android-support:2.14.1'

Примечание : необходимо настроить процесс аннотации, как показано на скриншоте ниже. Вы можете сделать это File>Other Settings>Default Settings> поиск "Annotation processor" enter image description here

23
ответ дан Uddhav Gautam 3 May 2017 в 09:55
поделиться

Может быть, вы забыли аннотировать ModuleClass с помощью @Module?

6
ответ дан Alex Shutov 3 May 2017 в 09:55
поделиться

Если Dagger2 не может сгенерировать свои компоненты, это означает, что в вашем коде есть ошибки с областями действия / модулями. Проверьте наши методы @ Provides / Inject.

UPD:

Вы должны внедрить свои компоненты в случаи, когда вам нужны экземпляры классов, предоставляемые модулем.

как

inject(MainActivity main);
1
ответ дан Anton Kazakov 3 May 2017 в 09:55
поделиться

В приложении build.gradle вам нужно добавить необходимые зависимости для Dagger для генерации соответствующих классов, как показано ниже:

  implementation 'com.google.dagger:dagger-android:2.21'
  implementation 'com.google.dagger:dagger-android-support:2.21' // if you use the support libraries
  annotationProcessor 'com.google.dagger:dagger-android-processor:2.21'
  annotationProcessor 'com.google.dagger:dagger-compiler:2.21'

вы должны изменить версию используемого кинжала.

см. Полный документ кинжала в этом

.
2
ответ дан Mr Special 3 May 2017 в 09:55
поделиться

В приведенном выше коде есть несколько незначительных заблуждений / ошибок, вот рабочая реализация:

Application.java:

component = DaggerComponentClass.builder().classModule(new ModuleClass()).build();

Сгенерированный класс будет назван DaggerComponentClass, а не DaggerCompClassComponent. Если вы не можете запустить свое приложение в Android Studio, чтобы его собрать, попробуйте в меню Build-> Clean project и Build-> Rebuild project. Если все в порядке, Dagger скомпилирует DaggerComponentClass, который будет находиться в том же пакете, что и ComponentClass.

ComponentClass.java:

@Component(modules = ModuleClass.class)
public interface ComponentClass {
    void inject(AClassThatShouldGetInstancesInjected instance);
}

Компонент в Dagger2 имеет методы с именем inject, которые получают экземпляр для вставки в него экземпляров, а не наоборот. В приведенном выше коде класс AClassThatShouldGetInstancesInjected обычно вызывает componentClass.inject(this);, чтобы получить экземпляры, внедренные в себя.

ModuleClass.java:

@Module
public class ModuleClass {
    @Provides
    @Singleton
    public Interceptor provideInterceptor() {/*code*/}

    //Your Providers...
}

Модуль корректен в вашем коде, убедитесь, что он аннотирован.

3
ответ дан Pär Nils Amsen 3 May 2017 в 09:55
поделиться

Если вы используете Kotlin, обязательно добавьте плагин Gradle kapt (процессор аннотаций Kotlin) в ваш скрипт сборки и используйте kapt тип зависимости Gradle вместо annotationProcessor для Dagger Compiler.

apply plugin: 'kotlin-kapt

kapt deps.daggercompiler
implementation deps.dagger
2
ответ дан Javad Sadeqzadeh 3 May 2017 в 09:55
поделиться
//add all the dependencies otherwise component class will not be generated.
implementation 'com.google.dagger:dagger-android:2.21'
implementation 'com.google.dagger:dagger-android-support:2.21'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.21'
implementation 'com.google.dagger:dagger:2.21'
annotationProcessor 'com.google.dagger:dagger-compiler:2.21'
0
ответ дан sudhanshu 3 May 2017 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: