Для обработки контекста 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.