Я пытаюсь реализовать управление версиями 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
ERealmMigration
в своем модуле, но никогда не предоставляли ему содержание карты. Тогда как кинжал может с этим справиться? - person Md. Asaduzzaman   schedule 02.02.2020