Ho il modulo Singleton con ambito che fornisce alcuni singleton standard: Applicazione, servizi DB, ecc. Ma per Attività ho un modulo separato che dovrebbe creare Presentatore per lui Attività e ho bisogno di passare il contesto dell'applicazione ad esso. Tuttavia ottengo seguente errore quando si tenta di compilare il progetto:Daga 2: Impossibile iniettare singleton in altro ambito
Error:(13, 1) error: xxx.SplashComponent scoped with @xxx.ViewScope may not reference bindings with different scopes:
@Provides @Singleton xxx.ApplicationModule.provideAppContext()
Ecco frammento di mio modulo di applicazione:
@Singleton
@Module
public class ApplicationModule {
private Application app;
public ApplicationModule(Application app) {
this.app = app;
}
@Provides
@Singleton
@Named("ui")
Scheduler provideUIScheduler() {
return AndroidSchedulers.mainThread();
}
@Provides
@Singleton
@Named("io")
Scheduler provideIOScheduler() {
return Schedulers.io();
}
@Provides
@Singleton
Application provideApplication() {
return app;
}
@Provides
@Singleton
Context provideAppContext() {
return app;
}
}
E qui è il modulo di attività e Componente:
@Module
public class SplashModule {
private final FragmentManager fragmentManager;
public SplashModule(FragmentManager fragmentManager) {
this.fragmentManager = fragmentManager;
}
@Provides
@ViewScope
Presenter getPresenter(Context context) {
return new SplashPresenter(context, fragmentManager);
}
}
Component :
@ViewScope
@Component(modules = {SplashModule.class, ApplicationModule.class})
public interface SplashComponent {
void inject(SplashActivity activity);
}
Cosa sto sbagliando?
Grazie. Dopo aver esaminato il tuo messaggio di errore, ho capito che il mio file Module conteneva metodi con diversi ambiti. Ad esempio, "@ FirstScope @ Binds Class1 method1()" e "@ SecondScope @ Binds Class2 method2()". – CoolMind