I'm using Dagger 2 with simple MVP pattern. I have a @PerApp
and @PerActivity
scopes. I'm injecting presenters dependencies using constructor injection, which makes those presenters "injectable" (I don't need to write provides methods in activity module). Code fragments:
PerApp:
// AppComponent
@PerApp
@Component(modules = {AppModule.class, DataModule.class, NetworkModule.class})
public interface AppComponent {
LoginComponent plus(LoginModule loginModule);
MainComponent plus(MainModule mainModule);
}
// Example @PerApp module
@Module
public class NetworkModule {
@Provides
@PerApp
Retrofit providesRetrofit(){
...
}
}
PerActivity:
// LoginModule
@Module
public class LoginModule {
private final LoginActivity mLoginActivity;
public LoginModule(LoginActivity loginActivity) {
mLoginActivity = loginActivity;
}
@Provides
@PerActivity
Context providesContext() {
return mLoginActivity;
}
}
// LoginComponent
@PerActivity
@Subcomponent(
modules = LoginModule.class
)
public interface LoginComponent {
void inject(LoginActivity loginActivity);
}
Activity:
public class LoginActivity {
@Inject LoginPresenter mPresenter;
}
Presenter:
public class LoginPresenter {
@Inject
public LoginPresenter(Retrofit retrofit) {
...
}
}
It's working great. My question is: What will be the scope of provided LoginPresenter
? Is it gonna be the same as LoginActivity
? Should I annotate the presenter's constructor with @PerActivity
or something?