Hi, how do we properly configure expect/actual dep...
# koin
r
Hi, how do we properly configure expect/actual dependencies with annotations? I have the following declarations:
Copy code
expect class DatabaseDriverFactory {
    fun createDriver(): SqlDriver
}
Copy code
@Factory
actual class DatabaseDriverFactory(private val context: Context) {
    actual fun createDriver(): SqlDriver {
        return AndroidSqliteDriver(
            schema = MyDb.Schema.synchronous(),
            context = context,
            name = "MyDb.db"
        )
    }
}
Copy code
@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:
Copy code
Missing Definition type 'DatabaseDriverFactory'  for 'getDatabase'
This is my module
Copy code
@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?
For now I have created a wrapper to fix this:
Copy code
expect class DbDriverFactoryWrapper() {
    val dbDriverFactory: DatabaseDriverFactory
}
f
I do it like this, need version 2.0.0-Beta2+:
Copy code
// commonMain
@Module
expect object PlatformModule
Copy code
// androidMain
@Module
actual object PlatformModule {
    @Single
    fun providesAppDatabaseBuilder(context: Context): RoomDatabase.Builder<AppDatabase> {
        TODO()
    }
}
Copy code
// iosMain
@Module
actual object PlatformModule {
    @Single
    fun providesAppDatabaseBuilder(): RoomDatabase.Builder<AppDatabase> {
        TODO()
    }
}
👍 1
r
Thanks! I ended up doing something similar:
Copy code
@Module //commonMain
expect class DatabaseModule() {
    @Factory
    fun getDatabaseFactory(): DatabaseDriverFactory
}
Copy code
@Module //iosMain
actual class DatabaseModule actual constructor() {

    @Factory
    actual fun getDatabaseFactory(): DatabaseDriverFactory = DatabaseDriverFactory()
}
Copy code
@Module //androidMain
actual class DatabaseModule actual constructor() {

    @Factory
    actual fun getDatabaseFactory(): DatabaseDriverFactory = DatabaseDriverFactory(getKoin().get()) //this is the context
}