Anyone have luck with Compose Multiplatform and Ko...
# koin
j
Anyone have luck with Compose Multiplatform and Koin Compiler with Annotations? It finds all my repos, Daos, online data sync manager, but @KoinViewModel doesn't do anything. It worked fine with KSP annotations.
Copy code
> Task :composeApp:compileAndroidMain
w: [Koin-FIR] Exporting @single SyncManagerImpl for cross-module discovery
w: [Koin-FIR] Exporting @single ArtistRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @single DayRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @single FestivalRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @single PersistenceRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @single RemoteRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @single SetRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @single StageRepositoryImpl for cross-module discovery
w: [Koin-FIR] Exporting @factory SyncFestivalDataUseCase for cross-module discovery
w: [Koin] @Single on function LocationTracker() -> LocationTracker
w: [Koin] @Single on class SyncManagerImpl
w: [Koin]   Binds: SyncManager
w: [Koin] @Single on class ArtistRepositoryImpl
w: [Koin]   Binds: ArtistRepository
w: [Koin] @Single on class DayRepositoryImpl
w: [Koin]   Binds: DayRepository
w: [Koin] @Single on class FestivalRepositoryImpl
w: [Koin]   Binds: FestivalRepository
w: [Koin] @Single on class PersistenceRepositoryImpl
w: [Koin]   Binds: PersistenceRepository
w: [Koin] @Single on class RemoteRepositoryImpl
w: [Koin]   Binds: RemoteRepository
w: [Koin] @Single on class SetRepositoryImpl
w: [Koin]   Binds: SetRepository
w: [Koin] @Single on class StageRepositoryImpl
w: [Koin]   Binds: StageRepository
w: [Koin] @Module/@ComponentScan on class DatabaseModule
w: [Koin]   @Single on function provideFestivalDao() -> FestivalDao
w: [Koin]   @Single on function provideDayDao() -> DayDao
w: [Koin]   @Single on function provideStageDao() -> StageDao
w: [Koin]   @Single on function provideArtistDao() -> ArtistDao
w: [Koin]   @Single on function provideArtistSetDao() -> ArtistSetDao
w: [Koin]   @Single on function provideSetDao() -> SetDao
w: [Koin]   @Single on function provideStageColorDao() -> StageColorDao
w: [Koin]   @Single on function provideFestivalColorThemeDao() -> FestivalColorThemeDao
w: [Koin]   @Single on function providePersistenceDao() -> PersistenceDao
w: [Koin] @Factory on class SyncFestivalDataUseCase
w: [Koin] DatabaseModule.module() content:
w: [Koin]   single: provideFestivalDao() -> FestivalDao
w: [Koin]   single: provideDayDao() -> DayDao
w: [Koin]   single: provideStageDao() -> StageDao
w: [Koin]   single: provideArtistDao() -> ArtistDao
w: [Koin]   single: provideArtistSetDao() -> ArtistSetDao
w: [Koin]   single: provideSetDao() -> SetDao
w: [Koin]   single: provideStageColorDao() -> StageColorDao
w: [Koin]   single: provideFestivalColorThemeDao() -> FestivalColorThemeDao
w: [Koin]   single: providePersistenceDao() -> PersistenceDao
w: [Koin] Intercepting startKoin<com.jimtj.festivalapp.di.FestivalAppConfig>()
w: [Koin]   -> No modules to inject
Just my basic persistence viewmodel for basic app data doesn't load:
Copy code
@KoinViewModel
class AppViewModel(
    private val persistenceRepository: PersistenceRepository,
    festivalRepository: FestivalRepository,
    private val syncFestivalDataUseCase: SyncFestivalDataUseCase
) : ViewModel() {
I have 5 other viewmodels that it doesn't even get to try loading before I get exceptions about not finding the definition of AppViewModel...
plus1 1
a
sounds like your ViewModels are not attached to your modules? 🤔
g
Are you using
@ComponentScan
?
j
Copy code
w: [Koin] Intercepting startKoin<com.jimtj.festivalapp.di.FestivalAppConfig>()
w: [Koin]   -> No modules to inject
can this be the issue? You need to have in your main app module this so it scans the stuff in the app module @Module @Configuration // so it can be discoverd by the @KoinApplication @ComponentScan // so it can scan the current package class AppModule Then you also need your application: @KoinApplication class MyApplication I noticed for my Android project, that startKoinMyApplication() (or koinConfigurationMyApplicaiton()) should also live in the same gradle module as where you defined the previous 2 so it can intercept it and inject the module into it. If I leave the MyApplication in a shared module, and then do koinConfigurationMyApplication() from my Android application module, it will not find anything to inject
a
@Module + @Configuration can be scanned through Gradle modules