我正在使用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 {
  ...
}


当我做上述事情时,编译器会抱怨“注释参数必须是编译时常量”。为什么?

最佳答案

您的模块和子组件之间具有循环依赖关系。


  由于我的子组件仅由特定模块的类使用[...]


您必须从subcomponents = MySubComponent.class中删除​​MyModule

如果您只想为MySubcomponent定义一些依赖项,则主模块(不是MyModule)应在其子组件中列出MySubcomponent,并且如您正确所做的那样,您必须在子组件的模块中列出MyModule 。这样,MyModule的依赖项将仅提供给MySubcomponent

10-07 22:49