Conversation
…ьзуя Dagger. Сделала AppComponent как @singleton и подключила его к Application. Создала Dagger-модули в AppModule.kt и SubcomponentsModule.kt Добавила базовые DI-интерфейсы в Dependencies.kt и ProductsDependencies.kt Обновила ServiceLocator для получения зависимости из AppComponent
… избранного. Упростила выдачу фабрики в FavoritesViewModelFactory.kt. Добавила @Inject constructor() Удалила лишний модуль FavoritesFeatureModule
| (context.applicationContext as ProductsApplication) | ||
| .appComponent | ||
| .favoritesComponent() | ||
| .create() |
There was a problem hiding this comment.
создание компонента и в целом вьюмодели лучше вынести наружу, например в composable навигации
There was a problem hiding this comment.
Вынесла в MainNavigation в composable
| import retrofit2.converter.gson.GsonConverterFactory | ||
| import java.util.concurrent.TimeUnit | ||
|
|
||
| object ServiceLocator { |
There was a problem hiding this comment.
этот файл вообще больше не нужен, мы его заменяем через Dagger
|
|
||
| @Singleton | ||
| @Component(modules = [AppModule::class]) | ||
| interface AppComponent : ProductsDependencies { |
There was a problem hiding this comment.
из компонента наружу торчит почти все подряд, это лишнее, по заданию нужно реализовать ProductsComponent
@FeatureScope
@Component(dependencies = [ProductsDependencies::class])
interface ProductsComponent {
fun viewModelFactory(): ProductsViewModelFactory
@Component.Factory
interface Factory {
fun create(dependencies: ProductsDependencies): ProductsComponent
}
}
There was a problem hiding this comment.
Удалила все ненужное. Оставила:
- наследование от ProductsDependencies (для передачи в ProductsComponent)
- Фабрику сабкомпонента FavoritesComponent
| fun productApiService(): ProductApiService | ||
| fun productRepository(): ProductRepository | ||
| fun favoritesRepository(): FavoritesRepository | ||
| override fun consumeProductsUseCase(): ConsumeProductsUseCase |
There was a problem hiding this comment.
вот эти все оверрайды тут не нужны, можно удалить
| return retrofit.create(ProductApiService::class.java) | ||
| } | ||
|
|
||
| @Provides |
There was a problem hiding this comment.
указание реализаций интерфейса делается через @Binds, а не @Provides:
@Binds
fun bindProductRepository(impl: ProductRepositoryImpl): ProductRepository
все ниже аналогично
| } | ||
|
|
||
| @Provides | ||
| fun providePriceFormatter(): PriceFormatter { |
There was a problem hiding this comment.
если у класса нет интерфейса, то его нужно в граф добавлять через @Inject constructor
…ех классов добавлены @Inject constructor, Исправлен AppComponent.kt Создание appComponent и view model вынесена в composable
No description provided.