gpt4 book ai didi

android - Dagger 注入(inject)可以用静态方法完成吗?

转载 作者:可可西里 更新时间:2023-11-01 18:45:24 25 4
gpt4 key购买 nike

我有这个网络模块。我想在 ErrorUtils 的静态方法中注入(inject)网络模块。

@Module
public class NetworkModule {
private final String END_POINT = "https://www.myurl.com/";

@Provides
@Singleton
public OkHttpClient getOkHttpClient() {
OkHttpClient okHttpClient = builder.build();
return okHttpClient;
}

@Provides
@Singleton
public GsonConverterFactory getGsonConverterFactory() {
return GsonConverterFactory.create();
}

@Provides
@Singleton
public Retrofit getRetrofit(OkHttpClient okHttpClient, GsonConverterFactory gsonConverterFactory) {
return new Retrofit.Builder()
.baseUrl(END_POINT)
.client(okHttpClient)
.addConverterFactory(gsonConverterFactory)
.build();
}

@Provides
@Singleton
public RetrofitService getRetrofitService(Retrofit retrofit) {
return retrofit.create(RetrofitService.class);
}

我想在静态方法中注入(inject)这个模块:

public class ErrorUtils {
@Inject
static Retrofit retrofit;

public static RestError parseError(Response<?> response) {

**//showing error while writing this line**

MyApplication.getComponent().inject(ErrorUtils.class);
Converter<ResponseBody, RestError> converter = retrofit.responseBodyConverter(RestError.class, new Annotation[0]);

RestError error;

try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new RestError();
}

return error;
}
}

我们如何在静态方法中注入(inject)模块,有什么建议吗?

最佳答案

Migrating from Dagger 1中可以看出

Dagger 2 does not support static injection.

静态方法和变量通常不是一个好主意。在你的情况下,你可以让你的 ErrorUtils 成为一个对象,例如具有 @Singleton 作用域。然后您可以正确地注入(inject)服务并正确地注入(inject)您的 errorUtils 而无需使用静态调用。

如果这不是一个选项,您可以只为您的组件提供一个 getter

@Component interface MyComponent {
Retrofit getRetrofit();
}

然后使用该方法设置静态变量。

关于android - Dagger 注入(inject)可以用静态方法完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com