我在使用Dagger 2时遇到了问题。我非常喜欢Dagger 1和Dagger 2之间的改变,但今天我碰到了一个难题。
这个问题涉及到作用域。
我正在遵循MVP架构。我有两个活动(列表和详细信息),我希望它们共享一个Presenter。原因是Presenter处理分页,详细视图具有ViewPager,我希望能够在滑动Pager时继续分页。
目前我有两个组件: ItemComponent 和 AppComponent
@ApplicationScope
@Component(modules = {AppModule.class, UIModule.class, DataModule.class})
public interface AppComponent extends AppGraph {
//Application Scoped dependencies
}
@ItemScope
@Component(
dependencies = AppComponent.class,
modules = ItemModule.class)
public interface ItemComponent {
void inject(final ItemDetailsActivity itemDetailsActivity);
void inject(final ItemDetailsFragment itemDetailsFragment);
void inject(final ItemListActivity itemListActivity);
}
ItemComponent有一个模块:ItemModule ItemModule提供了ItemPresenter
@Module
public class ItemModule {
private ItemDetailsActivity itemDetailsActivity;
private ItemDetailsFragment itemDetailsFragment;
private ItemListActivity itemListActivity;
public ItemModule(final ItemDetailsActivity itemDetailsActivity) {
this.itemDetailsActivity = itemDetailsActivity;
}
public ItemModule(final ItemDetailsFragment itemDetailsFragment) {
this.itemDetailsFragment = itemDetailsFragment;
}
public ItemModule(final ItemListActivity itemListActivity) {
this.itemListActivity = itemListActivity;
}
// The presenter that handles the pagination
@Provides
@ItemScope
public ItemListPresenter provideItemListPresenter(final ItemService itemService) {
return new ItemListPresenter(itemService);
}
}
所有这些都有范围ItemScope
但在这两个活动中,我需要初始化组件和模块,因此提供了演示文稿的新实例。我已经阅读了 StackOverflow 上的多个答案,并且我已经发现应该使用组件依赖项和/或子组件来解决这个问题,但我尚未能够使其正常工作。
提前致谢!