首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有@ DashboardMenuContract.OnGetAllDashboardMenuListener注释的方法,Dagger 2就不能提供

如果没有@ DashboardMenuContract.OnGetAllDashboardMenuListener注释的方法,Dagger 2就不能提供
EN

Stack Overflow用户
提问于 2018-12-19 09:11:12
回答 1查看 29关注 0票数 0

我发现了许多类似的问题,但没有人能解决我的问题,有人能指点我做错了什么。我试图弥补这一错误持续两天,但没有运气。

这是我的代码设置。

DashboardMenuContract.java

代码语言:javascript
复制
public interface DashboardMenuContract {

interface View{
void getAllDashboardMenuSucces(ArrayList<DashboardmenuModel> dashboardmenuModels);
void getAllDashboardMenuFailure(String message);
}
interface Presenter{
void getDashboardMenus();
}
interface Interactor{
void getAllDashboardMenusFromApi();
}

interface OnGetAllDashboardMenuListener{
void onGetAllDashboardMenuSucces(ArrayList<DashboardmenuModel> dashboardmenuModels);
void onGetAllDashboardMenuFailure(String message);
}
}

DashboardMenuPresenter.java

代码语言:javascript
复制
 public class DashboardMenuPresenter implements DashboardMenuContract.Presenter, DashboardMenuContract.OnGetAllDashboardMenuListener {

        private DashboardMenuContract.View view;
        private DashboardMenuInteractor dashboardMenuInteractor;

        @Inject
        public DashboardMenuPresenter(DashboardMenuContract.View view,DashboardMenuInteractor dashboardMenuInteractor) {
            this.view = view;
            this.dashboardMenuInteractor = dashboardMenuInteractor;
        }
}

DashboardMenuInteractor.java

代码语言:javascript
复制
public class DashboardMenuInteractor implements DashboardMenuContract.Interactor {
    private final ArrayList<DashboardmenuModel> dashboardmenuModelList = new ArrayList<>();
    DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener;
    @Inject
    public DashboardMenuInteractor(DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener) {
        this.onGetAllDashboardMenuListener = onGetAllDashboardMenuListener;
    }
}

MainActivityMvpModule.java

代码语言:javascript
复制
@Module
public class MainActivityMvpModule {
    private  DashboardMenuContract.View mView; 

    public MainActivityMvpModule(DashboardMenuContract.View mView) {
        this.mView = mView; 
    }

    @Provides
    @ActivityScope
    public DashboardMenuContract.View providesView(){
        return mView;
    } 



    @Provides
    @ActivityScope
    DashboardMenuContract.Interactor provideInteractor(DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener){
        return new DashboardMenuInteractor(onGetAllDashboardMenuListener);
    }


    @Provides
    @ActivityScope
    DashboardMenuPresenter providePresenter(DashboardMenuContract.View mView,DashboardMenuInteractor dashboardMenuInteractor){
        return new DashboardMenuPresenter(mView,dashboardMenuInteractor);
    } 
}

误差跟踪

代码语言:javascript
复制
E:\AndroidStudio\Motivation\app\src\main\java\motivation\com\motivation\component\DashboardMenuComponent.java:18: error: motivation.com.motivation.core.dashboardmanu.DashboardMenuContract.OnGetAllDashboardMenuListener cannot be provided without an @Provides-annotated method.
    void injectMainActivity(MainActivity mainActivity);
         ^
      motivation.com.motivation.core.dashboardmanu.DashboardMenuContract.OnGetAllDashboardMenuListener is injected at
          motivation.com.motivation.core.dashboardmanu.DashboardMenuInteractor.<init>(onGetAllDashboardMenuListener)
      motivation.com.motivation.core.dashboardmanu.DashboardMenuInteractor is injected at
          motivation.com.motivation.module.MainActivityMvpModule.providePresenter(…, dashboardMenuInteractor)
      motivation.com.motivation.core.dashboardmanu.DashboardMenuPresenter is injected at
          motivation.com.motivation.MainActivity.dashboardMenuPresenter
      motivation.com.motivation.MainActivity is injected at
          motivation.com.motivation.component.DashboardMenuComponent.injectMainActivity(mainActivity)
EN

回答 1

Stack Overflow用户

发布于 2018-12-19 09:32:33

您应该在MainActivityMvpModule中提供侦听器。也许你应该演dashboardMenuPresenter

代码语言:javascript
复制
@Provides
@ActivityScope
DashboardMenuContract.OnGetAllDashboardMenuListener provideListener(DashboardMenuPresenter dashboardMenuPresenter){
    return dashboardMenuPresenter;
}

编辑,因为通过我的回答,您得到了Found a dependency cycle错误,这是有意义的。我建议您删除DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener构造函数中的DashboardMenuInteractor,并为其提供setter方法。我认为这不是最好的解决办法,但它会解决你的问题。缺点是您必须在演示器中手动设置侦听器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53847871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档