Конструктор впрыскивает make MissingBinding в кинжал 2 и mvp - PullRequest
0 голосов
/ 20 ноября 2018

Я создал простой проект с dagger2 и mvp.

Это мой компонент:

@MainScope
@Component(modules = {MainModule.class})
public interface IMainComponent {
    void inject(MainActivity mainActivity);
}

и это MainModule.class:

@Module
public class MainModule {

    @MainScope
    @Provides
    IMain.IMainModel model() {
        return new MainModel();
    }
}

СейчасВ Presenter я хочу внедрить Presenter от его конструктора, поэтому я делаю:

public class MainPresenter implements IMain.IMainPresenter {
    IMain.IMainModel model;
    IMain.IMainView view;

    @Inject
    public MainPresenter(IMain.IMainModel model) {
        this.model = model;
    }  

Но я получил эту ошибку:

  symbol:   class DaggerIMainComponent
  location: package com.safarayaneh.engineer.main.di
E:\Projects\Android\NewEng\Engineer\engineer\src\main\java\com\safarayaneh\engineer\main\di\IMainComponent.java:9: error: [Dagger/MissingBinding] com.safarayaneh.engineer.main.mvp.IMain.IMainPresenter cannot be provided without an @Provides-annotated method.

Когда сделать provider в MainModule.class для создания Presenterи удалите @Inject над конструктором презентатора, все в порядке: @ Module

public class MainModule {

    @MainScope
    @Provides
    IMain.IMainModel model() {
        return new MainModel();
    }


    @MainScope
    @Provides
    IMain.IMainPresenter presenter(IMain.IMainModel model) {
        return new MainPresenter(model);
    }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Ваша проблема в том, что ваша активность ожидает IMain.IMainPresenter, но если вы просто аннотируете конструктор, то на графике объектов будет находиться конкретный MainPresenter.

У вас есть три варианта:

  1. Использовать явный метод провайдера (как вы это сделали)
  2. Использовать аннотацию @Binds внутри модуля, чтобы указать, что MainPresenter должно быть предоставлено как IMain.IMainPresenter
  3. Не используйте интерфейс для докладчика
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...