【发布时间】:2016-06-28 14:09:45
【问题描述】:
我有提供一些标准单例的单例范围模块:应用程序、数据库服务等。 但是对于 Activity,我有单独的模块应该为他的 Activity 创建 Presenter,我需要将 Application 上下文传递给它。但是在尝试编译项目时出现以下错误:
Error:(13, 1) error: xxx.SplashComponent scoped with @xxx.ViewScope may not reference bindings with different scopes:
@Provides @Singleton xxx.ApplicationModule.provideAppContext()
这是我的应用程序模块的 sn-p:
@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;
}
}
这里是 Activity 模块和组件:
@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);
}
}
组件:
@ViewScope
@Component(modules = {SplashModule.class, ApplicationModule.class})
public interface SplashComponent {
void inject(SplashActivity activity);
}
我做错了什么?
【问题讨论】:
-
谢谢。查看您的错误消息后,我了解到我的模块文件包含具有不同范围的方法。比如“@FirstScope@Binds Class1 method1()”和“@SecondScope@Binds Class2 method2()”。