Я пытаюсь реализовать управление версией 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