Im using dagger 2 for DI and im getting the message error:
MainFragmentContract.Presenter cannot be provided without an @Provides-annotated method.
But when I move my @Bind provideMainFragmentPresenter method from my MainFragmentModule to my ActivityBindingModule it build successfully.
Why it works when i move to the ActivityBindingModule class?, also if i move that method to my ActivityBindingModule class i cant add a scope because i get the message :
AppComponent scoped with scope.ApplicationScope may not reference bindings with different scopes.
There is my code.
AppComponent.java
@ApplicationScope
@Component(modules = {
AndroidInjectionModule.class, // Important
ApplicationModule.class,
NetworkModule.class,
ActivityBindingModule.class,
})
public interface AppComponent extends AndroidInjector<MyApplication> {
void injectApplication(MyApplication myApplication);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
ActivityBindingModel.java
@Module
public abstract class ActivityBindingModule {
@ContributesAndroidInjector(modules = {MainModule.class})
@ActivityScope
abstract MainActivity mainActivity();
@ContributesAndroidInjector(modules = {LoginModule.class})
@ActivityScope
abstract LoginActivity loginActivity();
@ContributesAndroidInjector(modules = MainFragmentModule.class)
@FragmentScope
abstract MainFragment provideMainFragment();
}
MainModule.java ( activity )
@Module
public abstract class MainModule {
@Binds
@ActivityScope
public abstract MainContract.Presenter
provideMainActivityPresenter(MainActivityPresenterImpl presenter);
}
MainFragmentModule.java
@Module
public abstract class MainFragmentModule {
@Binds
public abstract MainFragmentContract.Presenter
provideMainFragmentPresenter(MainFragmentPresenterImpl presenter);
}