Mam główną bibliotekę Android, w której definiuję reklamę CoreComponent przy użyciu zakresu @Singleton do wstrzykiwania instancji klas dostarczonych przez moduł podstawowy.Sztylet 2: Podaj to samo wystąpienie między wieloma komponentami z tym samym zakresem w różnych modułach bibliotecznych.
@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
void inject(SomeClass target);
}
@Module
public class CodeModule {
@Singleton
@Provides
CoreRepository provideCoreRepository() {
return new CoreRepositoryImpl();
}
}
Chciałbym dostęp do tych samych instancji @Singleton z innej biblioteki Android, który jest w zależności od biblioteki podstawowej i wykorzystuje inny komponent.
@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);
}
[...]
}
Powyższy kod jest budowany, ale zakres @Singleton jest "lokalny" dla komponentu. Innymi słowy, istnieją dwie instancje singleton, jedna dla CoreComponent i jedna dla FooComponent.
Android Application
├── Foo Library
| └── Core Library
├── Bar Library
| └── Core Library
·
·
·
└── Core Library
Myślę, że najlepszym rozwiązaniem powinno być przy użyciu podkomponent ale, niestety, nie wydaje się możliwe, ponieważ biblioteka Rdzeń ma widoczność innych bibliotek.
Czy istnieje inny sposób udostępnienia Sztyletowi tego samego wystąpienia jednej klasy między komponentami, jeśli klasa ma przypisany ten sam zakres?
Pan spojrzał w zależności [Component] (http://stackoverflow.com/q/29587130/1426891) jeszcze? Zobacz [Javadoc] (https://google.github.io/dagger/api/latest/dagger/Component.html#component-dependencies) tutaj i zauważ, że możesz potrzebować jawnego ujawnienia kilku dodatkowych metod dostępowych w twoim CoreComponent, aby FooComponent może je wywoływać. –
Zamówienie https://stackoverflow.com/questions/27036933/how-to-set-up-dagger-dependency-injection-from-scratch-in-android-project, które ma przykład użycia zakresów i zależnych komponentów. –