Да, это определенно возможно. Вероятно, есть разные способы добиться этого.
Это просто, если каждый компонент определяет область действия. Например, если ваши зависимости на уровне приложения @Singleton
, тогда вашему компоненту уровня активности также требуется @Scope
, например @ActivityScope
...
Например: компонент приложения/одиночки:
@Singleton
@Component
public interface ApplicationComponent {
MainPresenter getMainPresenter();
}
Модуль активности:
@Module
public class MainModule {
private final Activity mActivity;
public MainModule(Activity activity) {
mActivity = activity;
}
@Provides
Context provideContext() {
return mActivity;
}
// and other activity-specific dependencies here...
}
и соответствующий компонент уровня активности:
@ActivityScope
@Component(dependencies = ApplicationComponent.class, modules = MainModule.class)
public interface MainComponent {
void initialize(MainActivityFragment mainActivityFragment);
}
тогда все это просто работает... например, вы можете внедрить во фрагмент как синглтоны, так и зависимости области действия:
final MainComponent mainComponent = DaggerMainComponent.builder()
.applicationComponent(((App) getActivity().getApplication()).getComponent())
.mainModule(new MainModule(getActivity()))
.build();
...
mainComponent.initialize(this);
См. полный рабочий код здесь< /а>.
PS. Я не уверен, что лучше всего делать презентаторов синглтонами :-) По одной причине я ожидаю внедрить зависимости уровня активности в презентера, но таким образом это будет невозможно... Дайте мне знать как это работает для вас, и если вы найдете другой подход к удержанию докладчиков.
04.08.2015
Mortar
может решить эту проблему изощренным образом. 26.08.2015