Android 单例组件不能依赖于作用域组件
在定义Dagger组件时使用Dagger2进行依赖注入的Android应用程序中,我遇到了这个错误Android 单例组件不能依赖于作用域组件,android,dagger-2,Android,Dagger 2,在定义Dagger组件时使用Dagger2进行依赖注入的Android应用程序中,我遇到了这个错误 Error:(13, 1) error: This @Singleton component cannot depend on scoped components: @Singleton com.eaxample.app.DaggerAndroid.networkhandler.WebserviceComponent 我的组件代码如下: @Singleton @Component(modules
Error:(13, 1) error: This @Singleton component cannot depend on scoped components:
@Singleton com.eaxample.app.DaggerAndroid.networkhandler.WebserviceComponent
我的组件代码如下:
@Singleton
@Component(modules = {WebserviceModule.class}, dependencies = {ApplicationComponent.class})
public interface WebserviceComponent {
WebserviceHelper providesWebserviceHelper();
}
我得到的错误代码是:
@Singleton
@Component(modules = {RemoteDataModule.class}, dependencies = {WebserviceComponent.class})
public interface RemoteDataSourceComponent {
RemoteDataSource providesRemoteDataSource();
}
为什么会出现此错误以及如何解决此问题?
WebserviceComponent
和RemoteDataSourceComponent
不能具有相同的作用域。在dagger 2中,作用域定义了类似生命周期的东西,@Singleton
是最广泛的。因此,如果RemoteDataSourceComponent
依赖于WebserviceComponent
,这意味着WebserviceComponent
可以活得更长。dmitriyzaitsev的回答解释了出现错误的原因,下面是解决方法:
RemoteDataScope.java
的文件:
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface RemoteDataScope {
}
远程数据源组件中使用新的作用域,例如@RemoteDataScope
而不是@Singleton
:
@RemoteDataScope
@Component(modules = {RemoteDataModule.class}, dependencies = {WebserviceComponent.class})
public interface RemoteDataSourceComponent {
RemoteDataSource providesRemoteDataSource();
}
WebService
:
public interface WebService {
WebserviceHelper providesWebserviceHelper();
}
@Singleton
@Component(modules = {WebserviceModule.class}, dependencies = {ApplicationComponent.class})
public interface WebserviceComponent extends WebService {
// empty body now
}
制作WebserviceComponent
扩展WebService
:
public interface WebService {
WebserviceHelper providesWebserviceHelper();
}
@Singleton
@Component(modules = {WebserviceModule.class}, dependencies = {ApplicationComponent.class})
public interface WebserviceComponent extends WebService {
// empty body now
}
对于
RemoteDataSourceComponent
依赖项,将WebserviceComponent
替换为WebService
:
@Singleton
@Component(modules = {RemoteDataModule.class}, dependencies = {WebService.class})
public interface RemoteDataSourceComponent {
RemoteDataSource providesRemoteDataSource();
}
RemoteDataSourceComponent
应该有。我需要在Kotlin中使用@Retention(AnnotationRetention.RUNTIME)
。