【问题标题】:Constructor injecting make MissingBinding in dagger 2 and mvp构造函数注入使 Dagger 2 和 mvp 中的 MissingBinding
【发布时间】:2018-11-20 06:12:16
【问题描述】:

我用 dagger2 和 mvp 创建了一个简单的项目。

这是我的组件:

@MainScope
@Component(modules = {MainModule.class})
public interface IMainComponent {
    void inject(MainActivity mainActivity);
}

这是 MainModule.class:

@Module
public class MainModule {

    @MainScope
    @Provides
    IMain.IMainModel model() {
        return new MainModel();
    }
}

现在在演示者中,我想从它的构造函数中注入演示者,所以我这样做了:

public class MainPresenter implements IMain.IMainPresenter {
    IMain.IMainModel model;
    IMain.IMainView view;

    @Inject
    public MainPresenter(IMain.IMainModel model) {
        this.model = model;
    }  

但我得到了这个错误:

  symbol:   class DaggerIMainComponent
  location: package com.safarayaneh.engineer.main.di
E:\Projects\Android\NewEng\Engineer\engineer\src\main\java\com\safarayaneh\engineer\main\di\IMainComponent.java:9: error: [Dagger/MissingBinding] com.safarayaneh.engineer.main.mvp.IMain.IMainPresenter cannot be provided without an @Provides-annotated method.

当在 MainModule.class 中 make provider 创建演示者并删除演示者构造函数上方的 @Inject 时,一切都很好: @模块

public class MainModule {

    @MainScope
    @Provides
    IMain.IMainModel model() {
        return new MainModel();
    }


    @MainScope
    @Provides
    IMain.IMainPresenter presenter(IMain.IMainModel model) {
        return new MainPresenter(model);
    }
}

【问题讨论】:

  • 要解决在第一种情况下缺少IMain.IMainPresenter 提供者的问题,您可以在MainModule 中添加@MainScope @Provides IMain.IMainPresenter presenter(MainPresenter presenter) { return presenter; } - 这应该有助于匕首找到提供者。

标签: dagger-2 android-mvp


【解决方案1】:

您的问题是您的 Activity 需要 IMain.IMainPresenter,但如果您只是注释构造函数,那么放置在对象图上的是具体的 MainPresenter

这里有三个选项:

  1. 使用显式提供程序方法(就像您一样)
  2. 在模块内部使用@Binds注解指定MainPresenter应该提供为IMain.IMainPresenter
  3. 不要为演示者使用界面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2015-11-11
    • 1970-01-01
    • 2018-06-08
    • 2019-02-23
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多