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