// MODULESDagger2は@Injectコンストラクタなしに提供することはできません
@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();
}
}
// COMPONENTS
@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();
}
}
// PRELOGINACTIVITY`
// INSIDE THEの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)
私はこれをして、今私にNullPointerExceptionを与えています。なぜなら、@ Inject UserModel userModelは何も注入していないからです。私は何をすべきか? –
アクティビティではないクラスでdagger2コンポーネントをインスタンス化できますか? PreLoginPresenterのように?私はそこにオブジェクトが必要です –
あなたはいつでもどこでもDagger2コンポーネントを作成できますが、ライブラリやフレームワーク( '@ PerActivity'を提供しています)を使用している場合は、そのフレームワークの期待に従うべきです。 –