Проблема Dagger2 с «не может быть предоставлена ​​без аннотируемого метода @ Provides». - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь настроить новый проект с Dagger2, я раньше использовал Dagger2, но теперь я пытаюсь настроить его с нуля самостоятельно. Я получаю пример из проекта Kotlin, частью которого я являюсь, но не могу настроить его для Java так же, как он работает сейчас в Kotlin (или, может быть, я что-то упустил).

Это всего лишь один компонент, один модуль и приложение.

Компонентный

@Singleton
@Component(modules = {MainAppModule.class})
public interface AppComponent extends AndroidInjector<App> {
@Component.Builder
abstract class Builder implements AndroidInjector.Factory<App> {

    public AppComponent create(App application) {
        seedApplication(application);
        return build();
    }

    @BindsInstance
    abstract void seedApplication(App application);

    abstract AppComponent build();
}
}

Модуль

@Module
abstract class MainAppModule {

@Binds
abstract public Application bindApplication(App application);

@ContributesAndroidInjector
abstract public MainActivity contributeActivityInjector();
}

* Приложение *

public class App extends DaggerApplication {

@Override
public AndroidInjector<? extends DaggerApplication> applicationInjector() {
    return DaggerAppComponent.builder().create(this);
}
}

На данный момент у меня нет классов, с которыми я звоню @Inject Я просто получаю сообщение об ошибке во время сборки:

 error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.content.BroadcastReceiver>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.content.BroadcastReceiver>>> cannot be provided without an @Provides-annotated method.
public interface AppComponent extends AndroidInjector<App> {
        ^ 

Конечно cannot be provided without an @Provides-annotated method., кажется, проблема, но я просто не знаю, как ее решить. Он отлично работает на моем проекте kotlin, который кто-то еще настроил.

1 Ответ

0 голосов
/ 30 июня 2018

Похоже, вам не хватает AndroidInjectionModule (или AndroidSupportInjectionModule если вы используете вспомогательные фрагменты), установленного на вас AppComponent.

Это должно быть как:

@Component(modules = {AndroidInjectionModule.class, MainAppModule.class})
...