簡體   English   中英

Dagger 2 Singleton組件取決於Singleton

[英]Dagger 2 Singleton Component Depend On Singleton

我在這里遇到了一個奇怪的問題,我不太清楚為什么我正在做的事情是不允許的。 我有以下模塊:

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

由於各種原因,我不希望將這兩個模塊放在同一個組件中(主要是由於我的項目結構)。 所以我嘗試創建以下組件:

@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不允許? 這感覺它應該工作,因為我所做的只是聲明兄弟組件。 我錯過了什么?

由於NetComponent組件依賴於AppComponent組件,因此它們不能具有相同的范圍。 范圍用於注釋生命周期,並且因為NetComponent依賴於AppComponent,所以它們沒有相同的生命周期。 AppComponent可能比NetComponent壽命更長,因為它是NetComponent實際構建過程的一部分。 沒有AppComponent,NetComponent不可能存在,但不是相反。

您可以添加自己的自定義范圍並將其應用於NetComponent和NetModule,以便修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM