动态设置,当它与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

回到顶部