模块中的模块匕首:这个模块是公共的,但它包括非公共(或实际上非公共)模块



我正在使用Dagger 2进行DI,并希望将一个模块(模块A(注入另一个模块中(模块B(。我没有在任何组件或其他任何地方包含模块A。

我的代码如下:

@Module 
public class ModuleA {
@Provides
@Singleton
@Named("classA")
public ClassA classA() {
return new ClassA();
}
}
@Module(includes = ModuleA.class)
public class ModuleB {
@Provides
@Singleton
public ClassB classB(@Named("classA") ClassA classA) {
return new ClassB(classA);
}
}

我得到以下错误:

ModuleB.java:18: error: This module is public, but it includes non-public (or effectively non-public) modules. Either reduce the visibility of this module or make ModuleA public.
public class ModuleB {
^

我需要ModuleB是公共的,因为我将它注入另一个包中的组件中,所以唯一的选择是将ModuleA公开,但它已经是公共的了。

如何解决这个问题?此外,由于我是Dagger DI的新手,请告诉我是否没有遵循一些最佳实践,或者是否可以让我的代码变得更好。

我能够解决这个问题,它使用的是Dagger 2的旧版本。只需升级即可解决。

如果有人对这个问题感到不便,我很抱歉。

最新更新