在非 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() }
}
我正在尝试使用工作管理器并使用 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() }
}