繁体   English   中英

继承与泛型和Dagger2

[英]inheritance and generic and Dagger2

我有两种片段。 其中之一是ListFragment ,另一个是ListWithFilterFragmentListWithFilterFragment 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不能提供ListPresenterListWithFilterFragment -或者更确切地说,它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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM