在使用dagger2处理依赖注入的android应用程序同时定义dagger组件时,我收到此错误
Error:(13, 1) error: This @Singleton component cannot depend on scoped components:
@Singleton com.eaxample.app.DaggerAndroid.networkhandler.WebserviceComponent
Run Code Online (Sandbox Code Playgroud)
我的组件代码在这里:
@Singleton
@Component(modules = {WebserviceModule.class}, dependencies = {ApplicationComponent.class})
public interface WebserviceComponent {
WebserviceHelper providesWebserviceHelper();
}
Run Code Online (Sandbox Code Playgroud)
我遇到错误的成分代码是:
@Singleton
@Component(modules = {RemoteDataModule.class}, dependencies = {WebserviceComponent.class})
public interface RemoteDataSourceComponent {
RemoteDataSource providesRemoteDataSource();
}
Run Code Online (Sandbox Code Playgroud)
为什么会出现此错误以及如何解决此问题.
dmi*_*sev 12
WebserviceComponent并且RemoteDataSourceComponent不能有相同的范围.在匕首2中,范围定义了类似生命周期的东西,并且@Singleton是最广泛的.因此,如果RemoteDataSourceComponent依赖WebserviceComponent,这意味着WebserviceComponent可以活得更久.
Rum*_*raK 12
尽管dmitriyzaitsev的答案说明了为什么会出现错误,但以下是解决方法:
定义自己的范围(它实际上也将像Singleton范围一样)。例如,一个名为的文件RemoteDataScope.java:
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface RemoteDataScope {
}
Run Code Online (Sandbox Code Playgroud)使用新范围,例如,@RemoteDataScope而不是@Singleton在您的中RemoteDataSourceComponent:
@RemoteDataScope
@Component(modules = {RemoteDataModule.class}, dependencies = {WebserviceComponent.class})
public interface RemoteDataSourceComponent {
RemoteDataSource providesRemoteDataSource();
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3538 次 |
| 最近记录: |