动态设置,当它与Dagger2
创建我创建retrofit2
动态设置,当它与Dagger2
@Module public class NetworkModule {
private Context context;
public NetworkModule(Application app) {
this.context = app;
}
@Singleton
@Provides
Context providesContext() {
return context;
}
@Singleton
@Provides
OkHttpClient providesOkHttpClient(Utils utils) {
User user = utils.getSettings();
return new OkHttpClient.Builder()
.connectTimeout(Long.valueOf(user.getTimeOut()), TimeUnit.SECONDS)
.writeTimeout(Long.valueOf(user.getTimeOut()), TimeUnit.SECONDS)
.readTimeout(Long.valueOf(user.getTimeOut()), TimeUnit.SECONDS)
.build();
}
@Singleton
@Provides
Retrofit providesRetrofit(OkHttpClient okHttpClient, Utils utils) {
User user = utils.getSettings();
String host = user.getHost();
if (!host.endsWith("/")) host += "/";
return new Retrofit.Builder()
.baseUrl(host)
.addConverterFactory(JacksonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient).build();
}
@Singleton
@Provides
RestApiFactory providesRestApiFactory(Retrofit retrofit) {
return new RestApiFactory(retrofit);
}
}
dagger2
模块我有设置活动,其中用户可以改变的baseUrl,超时。如果我创建
providesRetrofit providesRestApiFactory
providesOkHttpClient
像@Singleton
- 后改变设置也不会改变。如果我删除@Singleton
注释 - 所有的工作。我的问题 - 当用户更改数据时,如何更新匕首@Singleton
?在单独的组件
回答:
广场NetworkModule(你的主要成分有可能子组件),当用户改变的baseUrl重建,超时等
你可以通过创建与@Subcomponent
注释的接口并添加您的网络模块存在。您可以通过从您的主要组件中调用您还需要添加的方法来实例化此子组件。
详细的教程
https://google.github.io/dagger/subcomponents.html
以上是 动态设置,当它与Dagger2 的全部内容, 来源链接: utcz.com/qa/265556.html