Dagger 2 Singleton Component Depend On Singleton

断了今生、忘了曾经 提交于 2020-02-01 00:13:31

问题


I've got a strange problem here, and I'm not quite sure why what I'm doing isn't allowed. I've got the following modules:

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

For various reasons, I don't want to have these two modules in the same component (basically due to my project structure). So I tried to create the following components:

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
  @AppContext Context appContext();
}

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

But when I try to compile this, I get the following error message:

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

I understand why depending on different scopes would be bad and disallowed. But why is Singleton depends-on Singleton not allowed? This feels like it should work, since all I'm doing is declaring sibling components. What am I missing?


回答1:


Because your NetComponent component depends on your AppComponent component, they cannot have the same scope. Scopes are used to annotate lifecycles, and because NetComponent depends on AppComponent, they don't have the same lifecycle. AppComponent could potentially live longer than NetComponent, because it's a part of the actual build process of NetComponent. NetComponent couldn't exist without AppComponent, but not the other way around.

You could add your own custom scope and apply that to your NetComponent and NetModule, that would fix it.



来源:https://stackoverflow.com/questions/39709317/dagger-2-singleton-component-depend-on-singleton

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!