У меня есть многомодульное приложение для Android, которое состоит из модуля данных, домена и презентации. Модуль "Домен" предназначен только для Java. Я знаю, что можно поддерживать рукоять в модулях, отличных от Android, добавив:
Домен build.gradle
implementation "com.google.dagger:hilt-core:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"
Модуль домена предоставляет реализации классов UseCase, которые должны быть внедрены в модели представления, которые находятся в модуле презентации (приложение).
Модуль домена:
@Module
@InstallIn(SingletonComponent::class)
// @InstallIn(ViewModelComponent::class)
object UseCaseModule {
@Provides
// @ViewModelScoped
fun provideGetMovieDetailsUseCase(
movieRepository: MovieRepository
): GetMovieDetailsUseCase {
return GetMovieDetailsUseCaseImpl(movieRepository)
}
}
Модуль презентации:
@HiltViewModel
class MovieDetailViewModel @Inject constructor(
private val getMovieDetailsUseCase: GetMovieDetailsUseCase
) : ViewModel() {
...
}
Из-за характера модуля только для java я не могу использовать аннотацию @InstallIn(ViewModelComponent::class)
. Вместо этого мне нужно установить зависимость в SingletonComponent::class
. Это также делается в awnser здесь
Мой вопрос
Является ли этот подход «лучшей практикой»? Или лучше сделать библиотеку Android-библиотекой, чтобы я мог определить зависимость от ViewModel? Я бы предпочел оставить его библиотекой только для java.