Я использую Dagger 2 для ввода зависимостей и MVP в качестве шаблона проектирования приложения.Как я могу избежать установки всех модулей моего компонента в операции для ввода зависимостей с помощью Dagger 2?
У меня есть 2 вида деятельности (MainActivity
и LoginActivity
). Каждый из них реализует интерфейс (MainView
и LoginView
) и имеет соответствующий модуль (LoginModule
и MainModule
). С другой стороны, у меня есть MainComponent
, который использует 2 модуля. Проблема заключается в следующем: Если я пытаюсь ввести зависимости в MainActivity
, мне просто нужен MainModule
, а не LoginModule
, но использует 2 модуля на своем графике. Таким образом, я должен установить 2 модуля (поправьте меня, если я ошибаюсь), это должно быть что-то вроде этого:
public void setupComponent(MyApplicationComponent appComponent){
DaggerMainComponent.builder()
.myApplicationComponent(appComponent)
.mainModule(new MainModule(this))
.loginModule(new LoginModule(???))
.build.inject(this);
}
Когда я впрыснуть в зависимости MainActivity
мне просто нужно установить MainModule
и в LoginActivity
в LoginModule
, нет обе. Как мне это сделать?
LoginModule:
@Module
public class LoginModule {
private LoginView loginView;
public LoginModule(LoginView view) {
loginView = view;
}
@Provides
public LoginView provideLoginView() {
return loginView;
}
MainModule:
@Module
public class MainModule {
private MainView mainView;
public MainModule(MainView mainView){
this.mainView=mainView;
}
@Provides MainView provideMainView(){
return mainView;
}
}
Как вы можете видеть MainModule
и LoginModule
, оба имеют один параметр в своих конструкторах (MainView
и LoginView
). Поэтому, зная, что MainActivity
реализует MainView
и LoginModule
, реализует LoginView
, если я в MainActivity
, и я хочу установить зависимости. Мне нужно установить MainModule
вот так: .mainModule(new MainModule(this)).build.inject(this)
. Но как насчет LoginModule
? Как я могу избежать установки этого в этом упражнении, не удаляя его из модулей MainComponent
? или как я могу его установить (я не могу использовать «ЭТО» в .loginModule(new LoginModule(this))
из-за MainActivity
инвентаря MainView
, но не LoginView
)?
MainComponent:
@ActivityScope
@Component(
dependencies = MyApplicationComponent.class,
modules = {LoginModule.class, MainModule.class}
)
public interface MainComponent {
void inject(LoginActivity loginActivity);
void inject(MainActivity mainActivity);
LoginPresenterImp getLoginPresenter();
MainPresenterImp getMainPresenter():
}
Спасибо заранее.
Если '' MainActivity' реализует MainView', почему вам нужно вставить экземпляр «MainView» в «MainActivity»? – benji