我有这个网络模块.我想在ErrorUtils的静态方法中注入网络模块.
@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);
}
Run Code Online (Sandbox Code Playgroud)
我想在静态方法中注入此模块:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我们如何在静态方法中注入模块,有什么建议吗?
Dav*_*jak 23
从匕首迁移1中可以看出
Dagger 2 不支持静电注射.
静态方法和变量通常是个坏主意.在您的情况下,您可以创建ErrorUtils
一个对象,例如使用@Singleton
范围.然后你可以正确地注入服务,并在errorUtils
不使用静态调用的情况下正确地注入你的服务.
如果这不是一个选项,您可以只为组件提供一个getter
@Component interface MyComponent {
Retrofit getRetrofit();
}
Run Code Online (Sandbox Code Playgroud)
然后使用该方法设置静态变量.
归档时间: |
|
查看次数: |
8969 次 |
最近记录: |