Если бы это было легче решить каким-либо другим способом, я был бы рад услышать это, но здесь это идет.
Я хочу каким-то образом предоставить моему методу @BindingAdapter экземпляр Glide, чтобы что я могу создать его один раз. В настоящее время я предоставляю это с помощью Koin здесь:
val glideModule = module {
single { provideRequestOptions() }
single { provideRequestManager(androidApplication(), get()) }
}
fun provideRequestManager(
application: Application,
requestOptions: RequestOptions
): RequestManager {
return Glide.with(application)
.setDefaultRequestOptions(requestOptions)
}
fun provideRequestOptions(): RequestOptions {
return RequestOptions()
.placeholder(R.drawable.loading_animation)
.error(R.drawable.ic_broken_image)
}
У меня есть метод @BindingAdapter, который выглядит следующим образом, который создает свой собственный экземпляр RequestManager. Теперь этот метод находится на верхнем уровне и, очевидно, не расширяет KoinComponent, поэтому у меня нет доступа к методам by lazy()
или get()
. И так как это метод @BindingAdapter, он должен быть верхнего уровня или внутри одноэлементного класса Object, который я также не нашел способа вставить что-то туда.
Я хотел бы изменить этот метод:
@BindingAdapter("imageUrl")
fun ImageView.bindImage(imageUrl: String?) {
imageUrl?.let { url ->
val parsedImageUrl = url.toUri().buildUpon().scheme("https").build()
Glide.with(this.context)
.load(parsedImageUrl)
.apply(
RequestOptions()
.placeholder(R.drawable.loading_animation)
.error(R.drawable.ic_broken_image)
)
.into(this)
}
}
Чтобы выглядеть примерно так:
@BindingAdapter("imageUrl")
fun ImageView.bindImage(imageUrl: String?) {
val injectedGlide: RequestManager by lazy()
imageUrl?.let { url ->
val parsedImageUrl = url.toUri().buildUpon().scheme("https").build()
injectedGlide.load(parsedImageUrl)
.into(this)
}
}
Теперь мой вопрос: я неправильно подхожу ко всей этой ситуации? Разве я не должен смотреть на Инъекцию моего скольжения внутри метода @BindingAdapter? Есть ли какой-то другой стандарт, которому я должен следовать? Это просто связано со мной, если я использую Коин неправильно?
Буду признателен за любые отзывы.