java - 如果没有 @Inject 构造函数,则无法提供 Dagger2

标签 java android dependency-injection dagger-2

//模块

@Module
public class PresenterModule {

    @Provides
    @PerActivity
    public MainPresenter provideMainPresenter() {
        return new MainPresenter();
    }

    @Provides
    @PerActivity
    public PreLoginPresenter providePreLoginPresenter() {
        return new PreLoginPresenter();
    }

    @Provides
    @PerActivity
    public NotificationPresenter provideNotificationPresenter() {
        return new NotificationPresenter();
    }
}

@Module
public class UserLoginModule {

    @Provides
    @PerActivity
    public UserModel getUser(){
        return new UserModel();
    }
}

//组件

@PerActivity
@Component(modules = {UserLoginModule.class})
public interface UserLoginComponent {

    void injectSharedPreferences(SharedPreferences sharedPreferences);
    void injectPreLoginPresenter(PreLoginActivity preLoginActivity);
}

@PerActivity
@Component(modules = {PresenterModule.class})
public interface PresenterComponent {

    //void injectMainPresenter(MainActivity mainActivity);
    void injectPreLoginPresenter(PreLoginActivity preLoginActivity);
    //void injectNotificationPresenter(NotificationActivity notificationActivity);

}

` //PRELOGINPRESENTER

public class PreLoginPresenter {

@Inject
UserModel userModel;

public String onStateSelected(String state) {
        userModel.setState(state);
        return userModel.getState();
 }

 }

//登录前 Activity `

//ONCREATE内部

//Instantiate dagger 2
                 PresenterComponent presenterComponent =                        DaggerPresenterComponent.builder()
                .build();
              presenterComponent.injectPreLoginPresenter(PreLoginActivity.this);//passar o contexto para o componente

    //Instantiate dagger 2
        UserLoginComponent userLoginComponent = DaggerUserLoginComponent.builder()
            .build();
        userLoginComponent.injectPreLoginPresenter(PreLoginActivity.this);//passar o contexto para o componente``

//错误日志

Error:(18, 53) error: cannot find symbol class DaggerPresenterComponent Error:(19, 53) error: cannot find symbol class DaggerUserLoginComponent Error:(19, 10) error: gorick.gradesprojectandroid.MVP.Presenter.Presenters.PreLoginPresenter cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method. This type supports members injection but cannot be implicitly provided. gorick.gradesprojectandroid.MVP.Presenter.Presenters.PreLoginPresenter is injected at gorick.gradesprojectandroid.MVP.View.PreLoginActivity.preLoginPresenter gorick.gradesprojectandroid.MVP.View.PreLoginActivity is injected at gorick.gradesprojectandroid.Dagger2.Component.UserLoginComponent.injectPreLoginPresenter(preLoginActivity)

最佳答案

您已将 PreLoginPresenter 绑定(bind)到 PresenterModule 中,但尚未将其安装到 UserLoginComponent 中。这意味着您的 UserLoginComponent 没有将 PreLoginPresenter 注入(inject) PreLoginActivity 所需的绑定(bind),因此代码生成失败,并给出错误消息。

您不需要用两个不同的组件注入(inject)同一个类;无法表达一个组件满足某些绑定(bind)而另一个组件满足其他绑定(bind)。相反,请确保您有一个涵盖所有内容的组件,然后使用该组件进行注入(inject)。

关于java - 如果没有 @Inject 构造函数,则无法提供 Dagger2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841104/

相关文章:

java - 在 REDIS 中存储 Java Date 对象

单击两个 jbutton 后的 java swing Action 事件

android - 使用 sqlite3 将 csv 导入 sqlite 给我一行

java - Spring 不会尝试将值注入(inject)到 constructor-arg 占位符中

java - 指南:范围相关问题

java - 我想用java写一个prim的算法

java - 如何用 Java 为该服务编写 TestCase?

java - 顶级 Activity 必须位于自定义包之外吗?

java - && 语法错误 AGP 新手指南

c# - Ninject.MVC 构造函数注入(inject),其中注入(inject)对象的构造函数采用参数