tmt*_*ark 13 java android dependency-injection dagger-2
我在这里遇到了一个奇怪的问题,我不太清楚为什么我正在做的事情是不允许的.我有以下模块:
@Module
public final class AppModule {
private Context mContext;
@Provides
@Singleton
@AppContext
public Context provideContext() { return mContext; }
}
@Module
public final class NetModule {
@Provides
@Singleton
public OkHttpClient provideOkHttp() {
return new OkHttpClient.Builder().build();
}
}
Run Code Online (Sandbox Code Playgroud)
由于各种原因,我不希望将这两个模块放在同一个组件中(主要是由于我的项目结构).所以我尝试创建以下组件:
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@AppContext Context appContext();
}
@Singleton
@Component(dependencies = AppComponent.class, modules = NetModule.class)
public interface NetComponent {
Retrofit retrofit();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,我收到以下错误消息:
Error:(12, 1) error: This @Singleton component cannot depend on scoped components:
@Singleton com.myapp.service.dagger.AppComponent
我理解为什么视不同的范围会很糟糕而且不允许.但是为什么Singleton依赖Singleton不允许?这感觉它应该工作,因为我所做的就是声明兄弟组件.我错过了什么?
oot*_*nii 19
由于NetComponent组件依赖于AppComponent组件,因此它们不能具有相同的范围.范围用于注释生命周期,并且因为NetComponent依赖于AppComponent,所以它们没有相同的生命周期.AppComponent可能比NetComponent寿命更长,因为它是NetComponent实际构建过程的一部分.没有AppComponent,NetComponent不可能存在,但不是相反.
您可以添加自己的自定义范围并将其应用于NetComponent和NetModule,以便修复它.
| 归档时间: |
|
| 查看次数: |
3970 次 |
| 最近记录: |