Я использую Dagger 2
Android-инжектор, чтобы ввести мои Activities
и Fragments
.
У меня есть общий RecyclerView
Адаптер и ViewHolderFactories
и Binders
в Map
.
Вот мой адаптер:
@Module
class CorePresentationModule {
@Provides
fun provideDisplayItemComperator(): DisplayItemComperator = DefaultDisplayItemComperator()
@Module
companion object {
@JvmStatic
@Provides
fun provideRecyclerAdapter(
itemComparator: DisplayItemComperator,
factoryMap: Map<Int, @JvmSuppressWildcards ViewHolderFactory>,
binderMap: Map<Int, @JvmSuppressWildcards ViewHolderBinder>,
androidPreconditions: AndroidPreconditions
): RecyclerViewAdapter {
return RecyclerViewAdapter(
itemComperator = itemComparator,
viewHolderFactoryMap = factoryMap,
viewBinderFactoryMap = binderMap,
androidPreconditions = androidPreconditions
)
}
}
}
Ящикмодуль презентации для моего фрагмента, например:
@Module
abstract class MessagesPresentationModule {
@Binds
@IntoMap
@IntKey(MESSAGE)
internal abstract fun provideMessagesViewModelFactory(factory: MessagesViewHolder.MessageViewHolderFactory): ViewHolderFactory
@Binds
@IntoMap
@IntKey(MESSAGE)
internal abstract fun provideMessagesViewHolderBinder(binder: MessagesViewHolder.MessagesViewHolderBinder): ViewHolderBinder
}
В другом фрагменте я снова внедряю свой адаптер и создаю другой модуль для моего экрана:
@Module
abstract class LinksPresentationModule {
@Binds
@IntoMap
@IntKey(LINK)
internal abstract fun provideLinksViewModelFactory(factory: LinksViewHolder.LinksViewHolderFactory): ViewHolderFactory
@Binds
@IntoMap
@IntKey(LINK)
internal abstract fun provideLinksViewHolderBinder(binder: LinksViewHolder.LinksViewHolderBinder): ViewHolderBinder
}
Когда MESSAGE
и LINK
равно 0, я получаю ошибку компиляции
Один и тот же ключ карты связан более одного раза для ViewHolderFactory
Как лучше всего избежать этого выполнения?положить все IntKeys
в класс констант с упорядоченными и увеличенными?
Спасибо.