在非 activity class 中使用 koin 时未找到 bean

No bean found when using koin in non-activity class

我正在尝试使用工作管理器并使用 Koin 来获取我已设置的一些依赖项。我的工作经理扩展 KoinComponent 然后允许我使用 by inject 但每次我尝试使用我试图获取的组件时我都会收到错误

NoBeanDefFoundException: No definition found for class AuthenticationService. Check your definitions!

请记住,我在活动和视图模型中使用这些依赖关系很好

我的工作经理

class BackgroundSync(private val context: Context, workerParams: WorkerParameters):CoroutineWorker(context, workerParams),
    KoinComponent{

    override suspend fun doWork(): Result {
        val authService:AuthenticationService by inject()
        val token = authService.getAuthToken() // Error here when trying to use it
    }
}

然后在我的 Koin 模块设置中我有这个

private val myModule = module {
    single<IAuthenticationService> { AuthenticationService() }
}

我用这个 作为参考,但我无法让它正常工作,知道我做错了什么吗?

在 Koin 中,您应该完全注入您提供的内容。在你的例子中,在 koin 模块中,你提供了一个 interface 但在 BackgroundSync 中你注入了 concrete class

我相信你需要注入接口:

class BackgroundSync(private val context: Context, workerParams: WorkerParameters):CoroutineWorker(context, workerParams),
    KoinComponent{

    override suspend fun doWork(): Result {
        val authService:IAuthenticationService by inject()
        val token = authService.getAuthToken() // Error here when trying to use it
    }
}

NoBeanDefFoundException, means without providing the dependency to koin component you are trying to access the object.

Try providing the instance to the koin component like below

private val myModule = module {
    single { AuthenticationService() }
}