我正在使用 MVP 和 Dagger 2 DI。我有一个片段,我在一些活动中重复使用。我有一个演示者的接口类型作为片段的属性,比如 MVPPresenter。根据使用 Fragment 的活动,我需要向其中注入不同的演示者(每个演示者都是 MVPPresenter 的实现)。所以我需要一种方法来根据需要将 MVPPresenter 的每个实现注入到 Fragment 中。
目前,我有一个糟糕的解决方案,它有效,但它完全是错误的,并创建了从未使用过的不必要的对象。这是代码:
public class MyFragment {
...
@Inject
public void setPresenter(@NonNull ProfilePresenter presenter) {
if (mAdapter instanceof ProfileAdapter) {
this.presenter = presenter;
}
}
@Inject
public void setPresenter(@NonNull ContactsPresenter presenter) {
if (mAdapter instanceof ContactsAdapter) {
this.presenter = presenter;
}
}
...
}
这是我的模块:
@Module
class PresentersModule {
@Provides
@Singleton
ProfilePresenter ProfilePresenter() {
return new ProfilePresenter();
}
@Provides
@Singleton
ContactsPresenter ContactsPresenter() {
return new ContactsPresenter();
}
}
你看,根据适配器类型,我分配演示者,或者不分配。我知道这很愚蠢。问题是 Dagger 需要指定确切的类型才能注入,并且接口类型不起作用。处理此类案件的正确方法是什么?