为什么Dagger不允许每个元素使用多个限定符注释?

时间:2014-04-24 20:02:28

标签: dagger

假设我有两个服务AServiceBService,这两个服务都需要api密钥。

所以在我的模块中,我做不了类似的事情:

@Provides @Singleton @A @ApiKey String provideAKey() { return "a"; }
@Provides @Singleton @B @ApiKey String provideBKey() { return "b"; }

(Dagger会抱怨“每个元素只允许一个限定符注释”)。 相反,我必须为每个组合定义两个单独的限定符:@ApiKeyA@ApiKeyB

对于具有多个依赖项的服务(考虑网络客户端,请求标头等),为每个组合定义这些限定符变得很麻烦,而不是简单地组合不同的注释。

这有明确禁止的原因吗?

2 个答案:

答案 0 :(得分:4)

简化Dagger的实施,并使其更快。

答案 1 :(得分:2)

请参阅this issue JSR330禁止有多个限定符注释。

有关详细信息,this discussion可能会有所帮助。