Я использую PageKeyedDataSource для подкачки страниц, вызывая API и используя Retrofit.
И я использую Dagger 2 для внедрения зависимости.
@Provides
Repository provideRepository(...) {
...
}
@Provides
PageKeyedVideosDataSource providePageKeyeVideosDataSource(Repository repository) {
...
}
@Provides
VideoDataSourceFactory provideVideoDataSourceFactory(PageKeyedHomeVideosDataSource pageKeyedHomeVideosDataSource) {
...
}
@Provides
ViewModelFactory provideViewModelFactory(Repository repository, VideoDataSourceFactory videoDataSourceFactory) {
...
}
Теперь мне нужно сделать то же самое, однако моему вызову нужен новый параметр: идентификатор.
@GET(Urls.VIDEOS_BY_CATEGORY)
Observable<RequestVideo> getVideosByCategory(
@Path("id") int categoryId, // <-- Now I need this new parameter
@Query("per-page") int perPage,
@Query("page") int page);
Раньше моему источнику PageKeyedVideosDataSource требовались только страница и страница для вызова, это было легко.Однако теперь мне нужно динамически поместить этот новый идентификатор параметра в PageKeyedDataSource.
Я увидел PagingWithNetworkSample и понял, что они добавили новый параметр в PagedKeyedDataSource, добавив его в конструктор.Затем я подумал об этом:
public PageKeyedCategoryVideosDataSource(int categoryId, Repository repository) {
this.categoryId = categoryId;
this.repository = repository;
}
Однако, если я добавлю идентификатор в конструктор, я думаю, что больше не смогу использовать кинжал 2, потому что при использовании кинжала 2 источник PageKeyedVideosDataSource несоздается динамически, поэтому я не могу продолжать изменять значение идентификатора.
Мне нужно динамически создать PageKeyedDataSource следующим образом:
int categoryId = getCategoryId();
PageKeyedVideosDataSource dataSource = new PageKeyedVideosDataSource(categoryId, repository);
- Должен ли я сделать это ине использовать Dagger 2?
- Возможно ли динамически создавать источник данных, все еще используя Dagger 2?