Android Dagger 2 с MVP - PullRequest
       26

Android Dagger 2 с MVP

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

Использование Dagger 2 впервые с MVP.

Я застрял в очень простой реализации.

мой модуль презентатора использует View Interface в конструкторе вместе с менеджером контекста и данных, я запутался в том, как отправить контекст действия конструктору для интерфейса представления. Любая помощь будет высоко оценена ..

Вот мой код для класса приложения:

public class App extends Application {


    private static App app;

    public SampleComponent getSc() {
        return sc;
    }

    private SampleComponent sc;

    public static App getApp() {
        return app;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        app = this;
        sc = DaggerSampleComponent.builder()
                //.sampleModule(new SampleModule())
                .presenterModule(new PresenterModule(new MainActivity(), getApplicationContext(), new ModelManager()))
                .build();

    }
}

Код для модуля Presenter:

@Module
public class PresenterModule {
    ShowCountContract.view v;
    ModelManager mm;
    Context c;
  public PresenterModule(MainActivity m, Context c,
                           ModelManager mm) {
        this.c = c;
        this.mm = mm;
        this.v = m;
    }

    @Singleton
    @Provides
    PresenterClass getPresentationClass() {


        return new PresenterClass(mm, v);
    }

}

1 Ответ

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

Для обработки контекста Android лучше всего создать компонент приложения с модулем приложения. Этот модуль должен отвечать за предоставление объектов, общих для всего приложения, таких как Context. И на основе этого компонента вы можете создавать подкомпоненты для каждой функции / действия / и т.д.

@Module
public class ApplicationModule {

    private final Application application;

    public ApplicationModule(Application application) {
        this.application = application;
    }

    @Provides
    Context provideContext() {
        return application;
    }

}

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

DaggerSampleComponent.builder()
        .applicationModule(new ApplicationModule(this))
        .otherModule(new OtherModule())
        .build();

Или вы можете использовать Component.Builder

Поскольку экземпляр Activity создается в Android Framework, мы не можем передать интерфейс View в качестве параметра конструктора. Обычный способ - создать такой метод, как attachView(ViewInterface) в Presenter, чтобы иметь возможность устанавливать внутреннее свойство.

Еще одна вещь, которую вы должны изменить, это удалить конструктор Presenter из App и позволить за это OtherModule:

@Module
public class OtherModule {
    @Singleton
    @Provides
    PresenterClass getPresentationClass(Context ctx) {
        return new PresenterClass(ctx, new ModelManager());
    }
}

Я рекомендую вам ознакомиться с этой статьей , в которой более подробно рассматриваются объяснения Кинжала и даже показана другая версия Кинжала, непосредственно относящаяся к среде Android.

...