//模块
@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/