привязка кинжала, Map ‹java.lang.Integer ,? extends javax.inject.Provider ‹VersionMigration› ›не может быть предоставлен без метода с аннотацией @ Provides.

Я пытаюсь реализовать управление версиями Realm с помощью dagger2 по этой ссылке Adavis Realm Перенос, но появляется следующая ошибка,

[Dagger / MissingBinding] java.util.Map> не может быть предоставлен без метода с аннотацией @ Provides. общедоступный абстрактный интерфейс CoreComponent {^

Коды следующие:

interface VersionMigration {
fun migrate(realm: DynamicRealm, oldVersion: Long)
}

class RealmVersion1Migration @Inject constructor(): VersionMigration {

override fun migrate(realm: DynamicRealm, oldVersion: Long) {

    val schema = realm.schema

    if (0 == oldVersion.toInt()) {

        schema.create("RealmAlbumEntity")
            .addField("album_id", String::class.java, FieldAttribute.PRIMARY_KEY)

        Timber.e("migration V1 complete")
    }
}
}

 @Reusable
class ERealmMigration @Inject constructor(
private val versionMigrations:
Map<Int, Provider<VersionMigration>>
) : RealmMigration {

init {
    Timber.e("IN Realm Migration")
}
override fun migrate(
    realm: DynamicRealm,
    oldVersion: Long,
    newVersion: Long
) {
    for (i in oldVersion.toInt() until newVersion) {
        val provider: Provider<VersionMigration> = versionMigrations.getValue(i.toInt())
        val versionMigration = provider.get()
        versionMigration.migrate(realm, i)
    }
}

}

Это мой включенный модуль в realmConfig, private const val REALM_SCHEMA = 1L

 @Module(includes = [MigrationsModule::class])
 class RealmConfigModule {

@Provides
@AppScope
fun provideRealm(realmConfiguration: RealmConfiguration): Realm {
    return Realm.getInstance(realmConfiguration)
}

@Provides
@AppScope
fun provideRealmConfiguration(
    @Named(CONTEXT_APPLICATION) application: Application,
    realmMigration: ERealmMigration
): RealmConfiguration {

    val config = RealmConfiguration.Builder().name(application.getString(R.string.real_db_name))
        .schemaVersion(REALM_SCHEMA)
        .migration(realmMigration)
        .modules(UserRealmModule(), EventRealmModule())
        .build()

    Realm.setDefaultConfiguration(config)

    return config
}

}

А это мой компонент приложения,

@Component(modules = [RealmConfigModule::class])
@AppScope
interface CoreComponent {

@Component.Factory
interface Factory {
    fun create(@BindsInstance application: Application): CoreComponent
}

}

Я пытался пройти по следующим ссылкам, но не смог извлечь из них полезное содержание. Ссылка 1 Ссылка 2 Ссылка 3


person Reprator    schedule 02.02.2020    source источник
comment
Вы использовали ERealmMigration в своем модуле, но никогда не предоставляли ему содержание карты. Тогда как кинжал может с этим справиться?   -  person Md. Asaduzzaman    schedule 02.02.2020
comment
Даже если я определяю его в dagger, он все равно дает мне ту же ошибку, поскольку на данный момент это функция, называемая MultiBinding, от dagger2   -  person Reprator    schedule 02.02.2020


Ответы (1)


Это простая ошибка, мне просто нужно добавить «@JvmSuppressWildcards»,

 @Reusable
class ERealmMigration @Inject constructor(
private val versionMigrations:
Map<Int,   @JvmSuppressWildcards Provider<VersionMigration>>
) : RealmMigration 

, благодаря этому ответу этого пользователя,

kotlin + Dagger2: не может быть предоставлен без @ Provides- аннотированный метод

person Reprator    schedule 02.02.2020