Bir CoreModule tarafından sağlanan sınıfların örneklerini enjekte etmek için @Singleton alanını kullanan bir CoreComponent reklamını tanımladığım bir Çekirdek Android Kitaplığım var.Hançer 2: Farklı kütüphane modüllerinde aynı Kapsamlı çoklu Bileşen arasında aynı örneği sağlayın
@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
void inject(SomeClass target);
}
@Module
public class CodeModule {
@Singleton
@Provides
CoreRepository provideCoreRepository() {
return new CoreRepositoryImpl();
}
}
Ben Çekirdek Kütüphanesi bağlı olduğu ve başka bir bileşen kullanan başka bir Android Kütüphanesi'nden aynı @Singleton örneklerini erişmek istiyorum. Yukarıdaki kod @Singleton kapsamına ama oluşturur
@Singleton
@FooScope
@Component(modules = {CoreModule.class, FooModule.class})
public interface FooComponent {
void inject(SomeActivity target);
}
public class FooActivity extends AppCompatActivity {
@Inject
public CoreRepository repo;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
injectDependencies();
super.onCreate(savedInstanceState);
}
[...]
}
Bileşen için "yerel" dir. Başka bir deyişle, CoreComponent için bir tane ve FooComponent için bir tane olmak üzere iki tane tekli durum vardır.
Android Application
├── Foo Library
| └── Core Library
├── Bar Library
| └── Core Library
·
·
·
└── Core Library
Bence en iyi çözüm Çekirdek Kitaplığı diğer kütüphanelerin hiçbir görüş vardır, çünkü ne yazık ki, mümkün görünmüyor, bir alt bileşen kullanılarak fakat gerektiğini düşünüyorum.
Sınıf aynı açıklamayla eklenmişse, Dagger ile aynı sınıftaki bir bileşenle paylaşmanın başka bir yolu var mı?
@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
CoreRepository coreRepository();
}
uygulama içerisinden bu tekil kapsamına sahip bileşen için bir başvuru oluşturun: -
sen [bileşen bağımlılıkları] baktınız mı senin içine enjekte edebilir (http://stackoverflow.com/q/29587130/1426891) henüz? Burada [Javadoc] 'a bakın (https://google.github.io/dagger/api/latest/dagger/Component.html#component-dependencies) ve CoreComponent'inizde bazı ekstra accessor yöntemlerini açık bir şekilde göstermeniz gerekebileceğini unutmayın. FooComponent onları arayabilir. –
Checkout https://stackoverflow.com/questions/27036933/how-to-set-up-dagger-dependency-injection-from-scratch-in-android-project Örneğin kapsamları ve bağımlı bileşenleri kullanma örneği var –