当前位置: 首页 > 知识库问答 >
问题:

没有@Inject构造函数,无法提供Dagger2

江嘉悦
2023-03-14

//模块

@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);

}

`//预登录Presenter

public class PreLoginPresenter {

@Inject
UserModel userModel;

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

 }

//预物流活动`

//在一次创建中

//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``

//错误日志

错误:(18,53)错误:找不到符号类DaggerPresentComponent错误:(19,53)错误:找不到符号类DaggerUserLoginComponent错误:(19,10)错误:gorick.gradesprojectandroid.MVP. Presenter. Presenter。PreLoginPresenter不能在没有@Inject构造函数或@Provides-或@Produces-注释方法的情况下提供。此类型支持成员注入,但不能隐式提供。gorick.gradesprojectandroid.MVP. Presenter. Presenter. PreLoginPresenter在gorick.gradesprojectandroid.MVP. View注入。PreLoginActivity.preLoginPresentergorick.gradesprojectandroid.MVP. View. PreLoginActive在gorick.gradesprojectandroid.Dagger2. Component. UserLoginComponent.injectPreLoginPresenter(preLoginActive)

共有1个答案

那安宁
2023-03-14

您已经在PresenterModule中绑定了PreLoginPresenter,但尚未将其安装在UserLoginComponent中。这意味着您的UserLoginComponent没有将PreLoginPresenter注入PreLoginActivity所需的绑定,因此代码生成失败,并向您提供该错误消息。

您不应该需要用两个不同的组件注入同一个类;无法表示一个组件满足某些绑定,而另一个组件满足其他绑定。相反,请确保您有一个覆盖所有内容的组件,并使用该组件进行注入。

 类似资料:
  • 我正试图在我的Android项目中使用Dagger2。首先,我想使用两个组件分别负责注入应用程序范围和活动范围的依赖关系。作为一个基本的参考,我使用了这个答案。 因此,有两种不同的方法来设置组件之间的关系:使用注释和使用参数。 如果使用第一个组件,我的工作正常。但是,当我尝试从注入依赖项时,就会出现以下构建时错误: 错误:com。实例用户界面。活动如果没有@Inject构造函数或@Provides

  • 问题内容: 我正在尝试在我的项目中实现dagger2,但遇到错误“ android.app.Application必须在没有@Inject构造函数或@Provides注释方法的情况下才能提供 ”。 这是我的代码: App.java di / AppModule.java di / AppComponent.java di / TestClassModule.java di / TestClassC

  • 所以我正在尝试将我的整个应用程序从匕首迁移到刀柄,显然我无法注入活动和碎片。 我的活动: 我的片段: 我的应用程序类: 像这样注入我的活动: 它抛出了这个错误: 项目级成绩: 应用级 Gradle(所有 3 个模块): 会不会是我的活动和片段扩展了不能用@ AndroidEntryPoint注释的基,因为它们有类型参数??救命啊! 同样在 dagger2 中,我使用了如下接口: 它的工作,但柄据说

  • 我正试图从这篇中级文章中学习Dagger2,并将RequestQueue作为活动级依赖项传递:https://proandroiddev.com/dagger-2-annotations-binds-contributesandroidinjector-a09e6a57758f我可以很好地创建应用程序组件,但我在ContributesAndroidInjector方面遇到了很多麻烦。应用类别: 应

  • 我有很多Android ViewModel类,它们往往有很多依赖项(大多数是Room中的DAO,每个SQLite表一个)。有些依赖项超过10个。 这很好,但Inject构造函数充满了参数,并且只包含样板代码,用于从构造函数参数设置注入的成员。 我想切换到“常规”注入成员,使用注释单独标识,就像其他(哑)类一样。 这对于与Android相关的类(尽管ViewModel被宣传为非Android依赖,例

  • 问题内容: 我在我的应用程序中使用Spring Social: 当我申请 到我的HomeController: 注入的工作方式如预期的一样,我可以从中获取信息。但是,当我将其应用到我的其他Cotrollers时,就像这样 我收到此错误: 我的猜测是我不能将Facebook注入带有注解@Transactional的Controller吗?我四处搜寻,但找不到任何解决方案。 问题答案: CGlib有一