android - Android 服务中的 Hilt 注入(inject)

标签 android dependency-injection dagger-2 dagger-hilt

我想在 Service 中注入(inject)一个类.让我们看看下面的代码:

class DeviceUtil @Inject constructor() {
   ...
}

@AndroidEntryPoint
class LocationUpdateService : Service() {

    @Inject
    lateinit var deviceUtil: DeviceUtil

    ...
}
@Inject lateinit var deviceUtil: DeviceUtil在 Activity 中工作正常,但在 Service 中不工作.
它给出了错误: kotlin.UninitializedPropertyAccessException: lateinit property deviceUtil has not been initialized

最佳答案

对于像我这样的傻瓜。正如 OP 在评论中所说,关于如何在 service 中注入(inject)对象的完整示例像这样:

import android.app.Service
import android.content.Intent
import android.os.Binder
import android.os.IBinder
import android.util.Log
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

import com.yourapp.services.UserService

@AndroidEntryPoint
class MyService: Service() {
    @Inject lateinit var userService: UserService

    override fun onCreate() {
        super.onCreate()

        userService.getUserList()
                .subscribe { userList -> Log.d("tag", "users: $userList") }
    }

    override fun onBind(intent: Intent?): IBinder? {
        return object: Binder() {
            // ...
        }
    }
}
至于您要注入(inject)的服务,请确保它的构造函数中有 @Inject 注释,如下所示:
class UserService @Inject() constructor() {
  // ...
}

关于android - Android 服务中的 Hilt 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66036448/

相关文章:

java - 如何从firebase数据库获取所有子节点?

android - 在没有选择器的情况下使用标准 gmail 应用程序发送电子邮件

java - 安卓 java.lang.IllegalArgumentException : byteCount

java - 如何初始化回收器适配器中的监听器?

kotlin - 如何将依赖项注入(inject) Kotlin 中的接口(interface)委托(delegate)?

php - 关于 PHP 中依赖注入(inject)的查询

dependency-injection - Ninject 会自动注入(inject)非绑定(bind)类吗?

android - 带有 Dagger 2 的不同范围的单个实例

android - GoogleApiClient 不得为 null [Awareness API]

android - 使用 Dagger 2.x 注入(inject)单例类