MSY*_*SYR 2 java android dependency-injection dagger retrofit
我正在尝试使用 dagger 限定符在我的 android 应用程序中提供不同类型的 OkHttpClient.Builder 。例如,我有两个注释,即 @Authorized 和 @WithTime,每个注释都应该向客户端构建器添加一些拦截器。
我希望能够通过注释提供方法来获得不同的构建器(添加不同的拦截器)。但当我有多个注释时,我不知道如何去做。
这就是我之前在只需要一个注释(@Authorized)时所做的事情。但现在我可能需要更多类型的客户,这是不可能的。
@Provides
@Singleton
@Authorized
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)
Run Code Online (Sandbox Code Playgroud)
@Provides
@Singleton
OkHttpClient.Builder provideOkHttpClientBuilder(...)
Run Code Online (Sandbox Code Playgroud)
Dagger 是基于 JSR 330 标准构建的:Java 依赖注入。所以你可以使用这些注释,它将得到完全支持。出于同样的原因,您不需要@Qualifier显式使用。您可以使用@Named本身带有@Qualifier注释的注释。
在第一个条目上添加 ,@Named("authorized")在第二个条目上添加@Named("basic")。您可以以类似的方式添加其他实现。现在,当您需要注入实例时,请使用相同的注释来识别类型。所以你的整体代码变成了,
授权:
@Provides
@Singleton
@Named("authorized")
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)
Run Code Online (Sandbox Code Playgroud)
基本的:
@Provides
@Singleton
@Named("basic")
OkHttpClient.Builder provideOkHttpClientBuilder(...)
Run Code Online (Sandbox Code Playgroud)
要注入authorized实例类型,现在您可以使用
@Inject
@Named("authorized")
OkHttpClient.Builder authorizedBuilder;
Run Code Online (Sandbox Code Playgroud)
与注入类似basic,您可以使用
@Inject
@Named("basic")
OkHttpClient.Builder basicBuilder;
Run Code Online (Sandbox Code Playgroud)
有关如何使用匕首的更多详细信息,请访问dagger 用户指南
| 归档时间: |
|
| 查看次数: |
4308 次 |
| 最近记录: |