シングルトンコンポーネントはスコープ付きコンポーネントに依存できません 質問する

シングルトンコンポーネントはスコープ付きコンポーネントに依存できません 質問する

作業中アンドロイドアプリケーションを使用するダガー2定義中に依存性注入を行う短剣コンポーネントこのエラーが発生します

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

なぜこのエラーが発生するのでしょうか? また、これを解決するにはどうすればよいですか?

ベストアンサー1

dmitriyzaitsev の回答ではエラーが発生する理由が説明されていますが、解決方法は次のとおりです。

  1. 独自のスコープを定義します (実際にはシングルトン スコープのように動作します)。たとえば、次のファイルがありますRemoteDataScope.java:

    @Scope
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RemoteDataScope {
    }
    
  2. 新しいスコープを使用します。たとえば、の@RemoteDataScope代わりに を使用します。@SingletonRemoteDataSourceComponent

    @RemoteDataScope
    @Component(modules = {RemoteDataModule.class}, dependencies = {WebserviceComponent.class})
    public interface RemoteDataSourceComponent {
           RemoteDataSource providesRemoteDataSource();
    }
    

おすすめ記事