У меня здесь странная проблема, и я не совсем понимаю, почему то, что я делаю, не допускается. У меня есть следующие модули: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? Это похоже на то, что он должен работать, поскольку все, что я делаю, - это декларирование родственных компонентов. Что мне не хватает?
Хм, я вижу - это имеет смысл. Но просто для того, чтобы задать здесь очевидный следующий вопрос, я полагаю, что это ограничение будет применяться ко всем дополнительным пользовательским областям, верно? Если я создал область «ПерАппликация», я мог бы применить ее к NetComponent/Module и быть в порядке. Но если бы я хотел создать другой компонент, зависящий от NetComponent, мне понадобится еще одна область (потому что жизненный цикл снова может быть немного другим). Это верно? – tmtrademark
Да, это правильно. – ootinii