In meinem Android-Projekt verwende ich die folgenden RetrofitApiModule
für einen API-Endpunkt. Bitte beachten Sie, dass ich Dagger zum Injizieren von Abhängigkeiten verwende.Wie können mehrere API-Endpunkte mit Retrofit behandelt werden?
@Module(
complete = false,
library = true
)
public final class ApiModule {
public static final String PRODUCTS_BASE_URL = "https://products.com";
@Provides
@Singleton
Endpoint provideEndpoint() {
return Endpoints.newFixedEndpoint(PRODUCTS_BASE_URL);
}
@Provides
@Singleton
ObjectMapper provideObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
return objectMapper;
}
@Provides
@Singleton
RestAdapter provideRestAdapter(
Endpoint endpoint, ObjectMapper objectMapper) {
return new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.NONE)
.setEndpoint(endpoint)
.setConverter(new JacksonConverter(objectMapper))
.build();
}
@Provides
@Singleton
ProductsService provideProductsService(RestAdapter restAdapter) {
return restAdapter.create(ProductsService.class);
}
}
Nun ist es eine andere API (z "http://subsidiaries.com"
), die ich mit kommunizieren möchten. Ist es möglich, die angegebene ApiModule
zu verlängern, während die ObjectMapper
und die RestAdapter
wiederverwendet werden? Oder sollte ich es nicht verlängern? Ich habe bereits versucht, das Modul zu duplizieren. Aber das beinhaltet, dass ich die Endpoint
, ObjectMapper
und ... die RestAdapter
eine private Konstruktor duplizieren muss - so kann ich nicht.
können Sie nicht einen Konstruktor von 'ApiModule' machen und den Endpunkt dort übergeben und entsprechend mit IF Bedingung in allen Methoden kodieren? –
@SweetWisher ツ Dependency Injection verwendet den ** Standardkonstruktor **. Das Übergeben von Parametern zur manuellen Bearbeitung verschiedener Fälle hilft daher hier nicht. – JJD