我正在尝试使用 dagger 限定符在我的 android 应用程序中提供不同类型的 OkHttpClient.Builder 。例如,我有两个注释,即 @Authorized 和 @WithTime,每个注释都应该向客户端构建器添加一些拦截器。
我希望能够通过注释提供方法来获得不同的构建器(添加不同的拦截器)。但当我有多个注释时,我不知道如何去做。
这就是我之前在只需要一个注释(@Authorized)时所做的事情。但现在我可能需要更多类型的客户,这是不可能的。
@Provides
@Singleton
@Authorized
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)
@Provides
@Singleton
OkHttpClient.Builder provideOkHttpClientBuilder(...)
Dagger 是建立在以下标准之上的JSR 330:Java 依赖注入 https://jcp.org/en/jsr/detail?id=330。所以你可以使用这些注释,它将得到完全支持。出于同样的原因,您不需要使用@Qualifier
明确地。您可以使用@Named
本身具有的注释@Qualifier
注释。
在您的第一个条目中,添加@Named("authorized")
然后在第二个添加@Named("basic")
。您可以以类似的方式添加其他实现。现在,当您需要注入实例时,请使用相同的注释来识别类型。
所以你的整体代码变成了,
授权:
@Provides
@Singleton
@Named("authorized")
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)
Basic:
@Provides
@Singleton
@Named("basic")
OkHttpClient.Builder provideOkHttpClientBuilder(...)
注射authorized
实例类型,现在您可以使用
@Inject
@Named("authorized")
OkHttpClient.Builder authorizedBuilder;
类似地注入basic
, 您可以使用
@Inject
@Named("basic")
OkHttpClient.Builder basicBuilder;
有关如何使用匕首的更多详细信息,请访问匕首用户指南 https://dagger.dev/users-guide
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)