2017-03-16 16 views
-1

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

答えて

1

あなたのPresenterModuleであなたのPreLoginPresenterを拘束しましたが、あなたはUserLoginComponentにそれをインストールしていません。つまり、UserLoginComponentにPreLoginPresenterをPreLoginActivityに注入するためのバインディングがないため、コード生成が失敗し、そのエラーメッセージが表示されます。

同じクラスに2つの異なるコンポーネントを注入する必要はありません。あるコンポーネントが特定のバインディングを満たし、別のコンポーネントが他のコンポーネントを満たしていることを表現する方法はありません。代わりに、すべてをカバーする1つのコンポーネントがあることを確認し、それを使用して注入します。

+0

私はこれをして、今私にNullPointerExceptionを与えています。なぜなら、@ Inject UserModel userModelは何も注入していないからです。私は何をすべきか? –

+0

アクティビティではないクラスでdagger2コンポーネントをインスタンス化できますか? PreLoginPresenterのように?私はそこにオブジェクトが必要です –

+0

あなたはいつでもどこでもDagger2コンポーネントを作成できますが、ライブラリやフレームワーク( '@ PerActivity'を提供しています)を使用している場合は、そのフレームワークの期待に従うべきです。 –

関連する問題