объявить подкомпонент в модуле поднять ошибку компилятора - PullRequest
1 голос
/ 19 октября 2019

Я использую Dagger 2.24.

У меня есть подкомпонент:

@Subcomponent(modules = MyModule.class)
public interface MySubComponent {
    void inject(MyApplication app);
}

Поскольку мой подкомпонент используется только классами определенного модуля, поэтому я пытаюсь объявить свой подкомпонентв этом модуле класса:

//Compiler error: An annotation argument must be a compile-time constant
@Module(subcomponents = MySubComponent.class)
abstract class MyModule {
  ...
}

Когда я делаю вышеупомянутые вещи, компилятор жалуется: «Аргумент аннотации должен быть константой времени компиляции». Почему?

1 Ответ

0 голосов
/ 23 октября 2019

У вас есть круговая зависимость между вашим модулем и вашим подкомпонентом.

Поскольку мой подкомпонент используется только классами определенного модуля [...]

Вы должны удалить subcomponents = MySubComponent.class из MyModule.

Если вы хотите определить некоторые зависимости только для MySubcomponent, ваш основной модуль (не MyModule) должен перечислить MySubcomponent в своем подкомпонентеи, как вы сделали правильно, вы должны перечислить MyModule в модулях подкомпонента. Таким образом, зависимость MyModule будет предоставлена ​​только для MySubcomponent

...