簡體   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