匕首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(); } } 

由于各种原因,我不希望这两个模块在同一个组件(基本上是由于我的项目结构)。 所以我试图创build以下组件:

 @Singleton @Component(modules = AppModule.class) public interface AppComponent { @AppContext Context appContext(); } @Singleton @Component(dependencies = AppComponent.class, modules = NetModule.class) public interface NetComponent { Retrofit retrofit(); } 

但是当我尝试编译这个,我得到以下错误信息:

Error:(12, 1) error: This @Singleton component cannot depend on scoped components: @Singleton com.myapp.service.dagger.AppComponent

我明白为什么取决于不同的范围将是不好的和不允许的。 但是为什么Singleton依赖Singleton不允许? 这感觉就像它应该工作,因为我正在做的是声明兄弟组件。 我错过了什么?

Solutions Collecting From Web of "匕首2单件组件取决于单件"

由于您的NetComponent组件取决于您的AppComponent组件,因此它们不能具有相同的作用域。 范围用于注释生命周期,并且因为NetComponent依赖于AppComponent,所以它们不具有相同的生命周期。 AppComponent可能比NetComponent的生命期更长,因为它是NetComponent实际生成过程的一部分。 没有AppComponent的情况下,NetComponent不能存在,但不能相反。

您可以添加自己的自定义范围,并将其应用到您的NetComponent和NetModule,这将解决它。