[英]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.