Области применения Dagger 2 в многомодульных проектах (компонент зависит от ошибки более одного компонента) - PullRequest
0 голосов
/ 06 февраля 2020

Недавно я попытался перенести проект с шаблоном внедрения зависимостей, используя Dagger 2 из структуры monolithi c в модульную форму.

Я видел разные примеры и лучшие практики, и, наконец, я решил иметь три разных независимых модуля, а именно:

Приложение Модуль ( Этот модуль скоро будет разделен на функциональные модули :))

Core Модуль (Предоставление глобальных данных, используя в приложениях и функциональных модулях)

Сеть Модуль (Обеспечить интерфейс запросов на модернизацию и API)

График зависимостей модуля выглядит следующим образом:

enter image description here

Оба Компоненты Core и Network имеют @ Singelton областей и app Компонент имеет @ AppScope (аналогично @ Singleton ).

CoreComponent:

@Singelton
@Component(modules = {
    CoreModule.class,
    PersistenceModule.class
})   public interface CoreComponent {
@Component.Builder
interface Builder {
    CoreComponent build();

    @BindsInstance
    Builder application(Application application);
}

DBHelper provideDbHelper();
}

NetworkComponent

@Singleton
@Component(modules = {
    AuthenticationModule.class,
})public interface NetworkComponent {
interface Builder {
    NetworkComponent build();
}

UserManager provideUserManager();

TokenManager provideTokenManager();
}

AppComponent

@AppScope
@Component(
    dependencies = {
            CoreComponent.class,
            NetworkComponent.class
    },
    modules = {
           //Modules
    }
    )public interface AppComponent extends AndroidInjector<DaalApplication> {

   @Component.Builder
    interface Builder {
    Builder coreComponent(CoreComponent coreComponent);

    Builder networkComponent(NetworkComponent networkComponent);

    @BindsInstance
    Builder daalApplication(DaalApplication daalApplication);

    AppComponent build();
   }

   }

Но я получаю следующую ошибку:

@xxx.AppScope xxx.AppComponent зависит от нескольких компонент области действия

Я также заменил @ AppScope на @ Singelton , но не работает, единственная работающая ситуация - сделать одно из Core или Сеть Область видимости Нет области действия .

Есть ли какие-либо приемы, которые можно использовать для добавления более одного компонента в компонент приложения зависимости?

Если ответ нет , что-то не так с моим модульным дизайном?

Я пытаюсь создать независимые модули для повторного использования в различных проекты.

...