Burada garip bir sorun var ve neden yaptığımın niçin izinli olduğundan emin değilim. Aşağıdaki modülleri var:Dagger 2 Singleton Bileşeni Singleton'a Bağlı
@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();
}
}
Çeşitli nedenlerle, ben (temelde nedeniyle projemin yapısına) aynı bileşende bu iki modüllere sahip olmak istemiyoruz.
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@AppContext Context appContext();
}
@Singleton
@Component(dependencies = AppComponent.class, modules = NetModule.class)
public interface NetComponent {
Retrofit retrofit();
}
Ama bu derlemeye çalıştığınızda, ben şu hata mesajı alıyorum: Ben aşağıdaki bileşenleri oluşturmaya çalıştık
Error:(12, 1) error: This @Singleton component cannot depend on scoped components: @Singleton com.myapp.service.dagger.AppComponent
anlıyorum neden farklı kapsamları bağlı olur Kötü ol ve izin ver. Ama Singleton neden Singleton'a izin verilmiyor? Bu işe yarayacak gibi geliyor, çünkü tek yaptığım kardeş komponentleri olduğudur. Neyi kaçırıyorum?
Hmm, anladım - bu mantıklı. Ancak, burada açık bir şekilde sorulan soruyu sormak için, bu sınırlamayı daha sonra tüm ek özel kapsamlara da uygulayacağım, doğru mu? "PerApplication" kapsamına sahip olsaydım, bunu NetComponent/Module'e uygulayabilir ve iyi olabilir. Ama eğer NetComponent'e bağlı başka bir bileşen oluşturmak istiyorsam, yine başka bir kapsama ihtiyacım olacaktı (çünkü yaşam döngüsü tekrar biraz farklı olabilir). Bu doğru mu? – tmtrademark
Evet, bu doğru. – ootinii