Ruben Quadros
01/19/2025, 3:40 PMexpect class DatabaseDriverFactory {
fun createDriver(): SqlDriver
}
@Factory
actual class DatabaseDriverFactory(private val context: Context) {
actual fun createDriver(): SqlDriver {
return AndroidSqliteDriver(
schema = MyDb.Schema.synchronous(),
context = context,
name = "MyDb.db"
)
}
}
@Factory
actual class DatabaseDriverFactory {
actual fun createDriver(): SqlDriver {
return NativeSqliteDriver(
schema = MyDb.Schema.synchronous(),
name = "MyDb.db",
maxReaderConnections = 4
)
}
}
But this fails to generate code for the native one. Under the ksp/ios* I do not see factory() { _ -> DatabaseDriverFactory() }
. The error I get is:
Missing Definition type 'DatabaseDriverFactory' for 'getDatabase'
This is my module
@Module
class CoreModule {
@Single
fun getDatabase(databaseDriverFactory: DatabaseDriverFactory): MyDb = MyDb.invoke(databaseDriverFactory.createDriver())
}
I'm guessing this might be because of the different constructors. What is the right way to go about this?Ruben Quadros
01/19/2025, 4:36 PMexpect class DbDriverFactoryWrapper() {
val dbDriverFactory: DatabaseDriverFactory
}
FlowFan
01/20/2025, 1:08 AM// commonMain
@Module
expect object PlatformModule
// androidMain
@Module
actual object PlatformModule {
@Single
fun providesAppDatabaseBuilder(context: Context): RoomDatabase.Builder<AppDatabase> {
TODO()
}
}
// iosMain
@Module
actual object PlatformModule {
@Single
fun providesAppDatabaseBuilder(): RoomDatabase.Builder<AppDatabase> {
TODO()
}
}
Ruben Quadros
01/20/2025, 3:37 AM@Module //commonMain
expect class DatabaseModule() {
@Factory
fun getDatabaseFactory(): DatabaseDriverFactory
}
@Module //iosMain
actual class DatabaseModule actual constructor() {
@Factory
actual fun getDatabaseFactory(): DatabaseDriverFactory = DatabaseDriverFactory()
}
@Module //androidMain
actual class DatabaseModule actual constructor() {
@Factory
actual fun getDatabaseFactory(): DatabaseDriverFactory = DatabaseDriverFactory(getKoin().get()) //this is the context
}