Java 如何使用dagger限定符注释来提供不同的OkHttpClient构建器?

Java 如何使用dagger限定符注释来提供不同的OkHttpClient构建器?,java,android,dependency-injection,retrofit,dagger,Java,Android,Dependency Injection,Retrofit,Dagger,我正在尝试使用dagger限定符在我的android应用程序中提供不同类型的OkHttpClient.Builder。例如,我有两个注释,即@Authorized和@WithTime,每个注释都应该向客户端生成器添加一些拦截器 我希望能够通过注释提供方法获得不同的构建器(添加不同的拦截器)。但是,当我有多个注释时,我不知道如何去做 这是我以前只需要一个注释(@Authorized)时所做的。但现在我可能需要更多类型的客户端,这是不可能的 @Provides @Singleton @Authori

我正在尝试使用dagger限定符在我的android应用程序中提供不同类型的OkHttpClient.Builder。例如,我有两个注释,即@Authorized和@WithTime,每个注释都应该向客户端生成器添加一些拦截器

我希望能够通过注释提供方法获得不同的构建器(添加不同的拦截器)。但是,当我有多个注释时,我不知道如何去做

这是我以前只需要一个注释(@Authorized)时所做的。但现在我可能需要更多类型的客户端,这是不可能的

@Provides
@Singleton
@Authorized
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)

您可以这样访问它
这就是创建限定符的方式

@qualifier
@保留(AnnotationRetention.RUNTIME)
@目标(AnnotationTarget.FIELD,AnnotationTarget.VALUE_参数,
AnnotationTarget.FUNCTION、AnnotationTarget.PROPERTY\u GETTER、AnnotationTarget.PROPERTY\u SETTER)
批注类已授权()


当您访问它时,您必须像下面这样在模块中注释您的提供者乐趣

@JvmStatic
@提供
@@您的PackageOqalifier(“授权”)

OkHttpClient.Builder提供了具有授权(…)

的KHttpClient.Builder,Dagger是基于的标准构建的。因此,您可以使用这些注释,它将得到完全支持。出于同样的原因,您不需要显式地使用
@限定符。您可以使用
@Named
注释,该注释本身具有
@Qualifier
注释

在第一个条目中,添加
@Named(“authorized”)
,在第二个条目中,添加
@Named(“basic”)
。您可以以类似的方式添加其他实现。现在,当您需要注入实例时,请使用相同的注释来标识类型。 所以你的整个代码变成

授权:

@Provides
@Singleton
@Named("authorized")
OkHttpClient.Builder provideOkHttpClientBuilderWithAuthorization(...)
基本:

@Provides
@Singleton
@Named("basic")
OkHttpClient.Builder provideOkHttpClientBuilder(...)
要注入
authorized
类型的实例,现在可以使用

 @Inject 
 @Named("authorized") 
 OkHttpClient.Builder authorizedBuilder;
 @Inject 
 @Named("basic") 
 OkHttpClient.Builder basicBuilder;
类似于inject
basic
,您可以使用

 @Inject 
 @Named("authorized") 
 OkHttpClient.Builder authorizedBuilder;
 @Inject 
 @Named("basic") 
 OkHttpClient.Builder basicBuilder;
有关如何使用匕首的更多详细信息,请访问