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

f2p*_*eek 4 dagger

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

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

@Provides @Singleton @A @ApiKey String provideAKey() { return "a"; }
@Provides @Singleton @B @ApiKey String provideBKey() { return "b"; }
Run Code Online (Sandbox Code Playgroud)

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

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

有没有明确禁止这样做的原因?

Jes*_*son 5

它是为了简化 Dagger 的实现,并使其更快。