мультисвязывание кинжала, карта <java .lang.Integer ,? extends javax.inject.Provider <VersionMigration>> не может быть предоставлен без аннотируемого метода @ Provides - PullRequest
0 голосов
/ 02 февраля 2020

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

[Dagger / MissingBinding] java. util.Map> не может быть предоставлен без аннотированного метода @ Provides. publi c абстрактный интерфейс 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
}

}

А это мой AppComponent,

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

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

}

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

1 Ответ

0 голосов
/ 02 февраля 2020

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

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

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

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

...