2017-05-03 87 views
3

我正在研究一个项目,并试图使其尽可能模块化。匕首2:@Module(包括=)做什么?

我正在尝试使用@Module(includes = {})注释来实现我的目标,并且它工作得不太好。

我有一个用于所有Java代码的gradle模块,并且每个部分都有一个模块(例如About页面依赖关系的AboutModule)。然后,整个“核心” gradle这个模块,我有一个匕首2模块称为“CoreModule”它看起来像这样:

@Module(includes = { 
     AddonModule.class, 
     VersionModule.class, 
     AboutModule.class} 
) 
public class CoreModule { 
} 

难道我就在想,在Android gradle这个模块中,所有的应用程序代码去,我应该能够将该模块包含在Component中,并且该组件可以@从CoreModule中列出的所有模块中注入任何东西?

目前,我从这些组件收到编译错误,提示它们注入的文件是“要求”一个完全不同的类,它不在模块中。例如,我有一个GitHubComponent被注入到GitHubActivity中,并且还尝试使用@Inject注释GithubService注入,但是编译器抛出错误,该类试图注入另一个类...这在目标文件中没有提及。我已经sjmplfied这个试图清除错误,但我没有看到它出错的地方。

我找不到这方面的任何文档。包含部分实际上做了什么?我是否正确使用它,因此错误在其他地方?

回答

5

参见Module.includes文档:从此模块由

附加@Module -annotated类。包含的模块的重复删除,递归地包含它们的内容都是对象图的贡献。

总之,是的,Module.includes是来自任何包括封闭模块(在您的示例CoreModule)列出的模块(AddonModule,VersionModule和AboutModule在你的例子)添加依赖的方式。

+1

感谢您的支持。我在Docs页面上看到了高和低(尽管在我家的通勤车上),但是找不到它。我一直以正确的方式使用它们,这非常棒。感谢您帮助解决这个问题!关于ti我的错误实际上我发现这是因为CoreModule包含了Core库中的所有模块,其中一些依赖项没有包含在我正在使用的组件中(GitHubComponent,在这种情况下 - 版本和Addon模块在GitHub模块中没有提供另一个Retrofit存储库依赖项)。那也解决了那个问题! – MattBoothDev