У меня есть базовая библиотека Android, где я определяю объявление CoreComponent, используя область @Singleton, чтобы внедрить экземпляры классов, предоставляемых CoreModule.
@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
void inject(SomeClass target);
}
@Module
public class CoreModule {
@Singleton
@Provides
CoreRepository provideCoreRepository() {
return new CoreRepositoryImpl();
}
}
Я хотел бы получить доступ к тем же экземплярам @Singleton из другой библиотеки Android, которая зависит от базовой библиотеки и использует другой компонент.
@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);
}
[...]
}
Код выше строит, но область @Singleton является "локальной" для Компонента. Другими словами, есть два одиночных экземпляра, один для CoreComponent и один для FooComponent.
Android Application
├── Foo Library
| └── Core Library
├── Bar Library
| └── Core Library
·
·
·
└── Core Library
Я думаю, что лучшим решением должно быть использование подкомпонента, но, к сожалению, это кажется невозможным, потому что основная библиотека не видна другим библиотекам.
Есть ли другой способ поделиться с Dagger одним и тем же экземпляром одного класса между компонентами, если класс помечен одной и той же областью действия?