Я хочу использовать Dagger для создания модуля для AFragment с дочерними фрагментами (X ... Z) FragModule.
Начиная с ActivityBindingModule, я определяю зависимые модули примера действия
/* ActivityBindingModule.java */
@Module
public abstract class ActivityBindingModule{
@NonNull
@ActivityScoped
@ContributesAndroidInjector(modules = {
AFragModule.class,
BFragModule.class
// ... fragment modules
})
abstract MainActivity mainActivity();
}
В AFragModule я определяю его зависимые от дочернего фрагмента модули.
/* AFragModule.java */
@Module
public abstract class AFragModule{
@NonNull
@FragmentScoped
@ContributesAndroidInjector(modules = {
XFragModule.class,
YFragModule.class
// ... child fragment modules
})
abstract AFragment providesFragment();
}
In(X ... Z) FragModule, я определил методы поставщика его зависимых объектов.
/* XFragModule.java */
@Module
public abstract class XFragModule{
@FragmentScoped
@ContributesAndroidInjector
abstract XFragment providesFragment();
@ActivityScoped
@Binds
abstract XContract.Presenter providesPresenter(XPresenter presenter);
}
Я хочу, чтобы модули (X ... Z) FragModule находились в пределах AFragModule.И (X ... Z) презентаторы FragModules находятся в одной области для связи между докладчиками.
Сама реализация XPresenter использует инжектор конструктора с параметрами @Singleton (например, источниками данных)
Я получаю следующую ошибку с вышеуказанными областями:
Cause: binding is not resolved for XContract.Presenter: ProvisionBinding{contributionType=UNIQUE, key=XContract.Presenter, bindingElement=Optional[providesPresenter(XPresenter)], contributingModule=Optional[XFragModule], kind=DELEGATE, nullableType=Optional.empty, wrappedMapKeyAnnotation=Optional.empty, provisionDependencies=[DependencyRequest{kind=INSTANCE, key=XPresenter, requestElement=Optional[presenter], isNullable=false}], injectionSites=[], unresolved=Optional.empty, scope=Optional[@ActivityScoped]}
РЕДАКТИРОВАТЬ: Я также хочу проверить мое понимание области действия: «я думаю», я понимаю следующее
@ Singleton> @ActivityScope> @ FragmentScope
Области не могут зависеть от той же или меньшей области видимости, напр.@ActivityScope не может зависеть от @ActivityScope или @ FragmentScope
Области действия могут зависеть от большего объема.ех.@FragmentScope может зависеть от @Singleton, @ActivityScope отмеченных методов.