, LoggedInComponent LoggedOutComponent , , LoggedInComponent LoggedOutComponent, NetworkModule . , AppComponent. , AppComponent ApplicationScope: AppComponent, .
, NetworkModule AppComponent, NetworkModule. , (. " " Dagger), , , .
, NetworkComponent, NetworkManager, (ApplicationScope). NetworkComponent.
@Module(subcomponents={NetworkComponent.class})
public abstract class ApplicationModule {
@Provides Retrofit provideRetrofit(NetworkManager manager) {
return manager.getNetworkComponent().getRetrofit();
}
}
@ApplicationScope public class NetworkManager {
private final Provider<NetworkComponent.Builder> builderProvider;
private NetworkComponent currentComponent;
@Inject public NetworkComponentHolder(
Provider<NetworkComponent.Builder> builderProvider) {
this.builderProvider = builderProvider;
currentComponent = builderProvider.get()
.withNetworkModule(getDefault())
.build();
}
public void updateSettings(String baseUrl) {
currentComponent = builderProvider.get()
.withNetworkModule(new NetworkModule(baseUrl))
.build();
}
public NetworkComponent getNetworkComponent() {
return currentComponent;
}
}
AppComponent, LoggedInComponent LoggedOutComponent Retrofit ( Provider<Retrofit>), . , URL-, NetworkManager, updateSettings, Retrofit . ( , , Retrofit , , , .)
p.s. NetworkModule , NetworkModule ApplicationComponent NetworkManager Retrofit .. , provideRetrofit, , .