[英]inheritance and generic and Dagger2
我有兩種片段。 其中之一是ListFragment
,另一個是ListWithFilterFragment
是ListWithFilterFragment extend ListFragment
。 我還為ListWithFilterPresenter extend ListPresenter
這些片段提供了兩個演示ListWithFilterPresenter extend ListPresenter
。 因此,我為演示者定義了單獨的模塊,並在Dagger中定義了單獨的組件。 我想向這些片段注入正確的演示者,但出現錯誤
這是ListFragment
:
public class ListFragment<V extends ListView> extends BaseFragment<V, ListPresenter<V>> implements ListView {
@Inject
ListPresenter presenter;
@NonNull
@Override
public ListPresenter createPresenter() {
DaggerListComponent.builder().build().inject((ListFragment<ListView>) this);
return presenter;
}
這是ListWithFilterFragment
:
public class ListWithFilterFragment extends ListFragment<ListWithFilterView> implements ListWithFilterView {
@Inject
ListWithFilterPresenter presenter;
@NonNull
@Override
public ListWithFilterPresenter createPresenter() {
DaggerListWithFilterComponent.builder().build().inject(this);
return presenter;
}
}
這是ListComponent
:
@Singleton
@Component(modules = {ListPresenterModule.class,
ListInteractorModule.class})
public interface ListComponent {
void inject(ListFragment<ListView> fragment);
}
這是ListWithFilterComponent
:
@Singleton
@Component(modules = {ListWithFilterPresenterModule.class,
ListInteractorModule.class})
public interface ListWithFilterComponent {
void inject(ListWithFilterFragment fragment);
}
和我的主持人模塊
@Module
public class ListWithFilterPresenterModule {
@Provides @NonNull @Singleton
public ListWithFilterPresenter providePresenter(ListInteractor interactor) {
return new ListWithFilterPresenter(interactor);
}
}
@Module
public class ListPresenterModule {
@Provides @NonNull @Singleton
public ListPresenter providePresenter(ListInteractor interactor) {
return new ListPresenter(interactor);
}
}
錯誤:(16,10)錯誤:如果沒有在以下位置插入@ Provides-或@ Produces-annotated.method.com.sober.appModules.List.presenter.ListPresenter,則無法提供com.sober.appModules.List.presenter.ListPresenter。 com.sober.appModules.List.ui.ListFragment.presenter com.sober.appModules.List.ui.ListWithFilterFragment在com.sober.appModules.List.injection.ListWithFilterComponent.inject(fragment)處注入
匕首不進行部分注入。 它可以提供所有對象,否則將無法提供而失敗。
你的情況ListWithFilterComponent
不能提供ListPresenter
到ListWithFilterFragment
-或者更確切地說,它ListFragment
父母。
在行末查看注釋
error: List.presenter.ListPresenter cannot be provided without an @Provides- or @Produces-annotated.method.
List.presenter.ListPresenter is injected at <- missing object
List.ui.ListFragment.presenter <- field in parent that is getting injected
List.ui.ListWithFilterFragment is injected at <- object it tries to inject
List.injection.ListWithFilterComponent.inject(fragment) <- component that's missing something
如果要保留當前設置,則還需要從ListWithFilterComponent
提供ListPresenter
,否則,您將需要重構片段,以使它們不會彼此擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.