Мой текущий проект Android состоит из следующих модулей
1). Главное приложение
2). Модуль Android A
3). Android-модуль B
4). Модуль Java C
5). Модуль Android D
Я использую Dagger 2 (v2.15) в качестве структуры DI.
Я пытаюсь ввести следующие зависимости: -
Внедрить экземпляры Android-модуля A в главное приложение
Внедрить экземпляры Java-модуля C в главное приложение
Внедрить экземпляры Android-модуля D в главное приложение
Внедрить экземпляры Android-модуля B в Android-модуль A
Каждый модуль имеет следующие два класса / интерфейса, относящиеся к Dagger.
@Module
public class ModuleX {
@Singleton
@Provides
static ClassX provideClassX() {
return new ClassXImpl();
}
}
@Singleton
@Component(modules = {ModuleX.class})
public interface ClassXComponent {
}
Мое основное приложение имеет следующие классы / интерфейсы, связанные с кинжалом
@Module
public abstract class MainActivityModule {
@ContributesAndroidInjector
abstract MainActivity contributeMainActivity();
@ContributesAndroidInjector
abstract Second contributeSecond();
}
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
MainActivityModule.class,
ModuleA.class,
ModuleB.class,
ModuleC.class,
ModuleD.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(MyApplication myApplication);
}
Эта конфигурация успешно внедряет все мои необходимые зависимости, кроме инъекции Экземпляры Android Module B в Android Module A. Может ли Dagger2 внедрять зависимости «между» модулями?
Что мне не хватает для достижения желаемого решения?
В конце концов, я получил эту работу с помощью подкомпонентов.
@Hector, можете ли вы опубликовать ответ своим решением?
Не могли бы вы подробнее рассказать о своей проблеме, что вы не можете внедрить из B в A, это компоненты? так как вы настроили график компонентов приложения, все привязки модулей должны быть видны дереву компонентов. Вы также рассматривали подкомпоненты?