android - 将类注入服务
问题描述
我正在开发一个 android 应用程序,并且我正在将 MVVM 模式与 Dagger、Databinding 等一起使用。
目前我有一个名为 DataManager 的网络层,它注入每个 ViewModel。这个 Datamanager 类是向我的服务器发出请求的类。
它看起来像这样
@Singleton
class DataManager @Inject constructor(context: Context, private val sharedPreferences: ISharedPreferences, private val apiHelper: APIHelper) : IDataManager {
...
}
片段/活动一切正常,但现在我想启动服务并在后台发出请求,但我不确定如何在服务中注入我的数据管理器类。
服务看起来像:
class UploadService constructor() : BaseTaskService() {
private lateinit var filePaths: ArrayList<String>
private var sourceID: Int = 0
private var typeID: Int = 0
...
onStartCommand ..
onBind ..
}
解决方案
与活动/片段相同的方式使用@ContributesAndroidInjector
您的应用模块:
@Module(
includes = [AndroidSupportInjectionModule::class,
ActivityBuilderModule::class, ServiceBuilderModule::class, ...]
)
abstract class ApplicationModule {
...
}
您的服务子组件:
@Module
abstract class ServiceBuilderModule {
@ContributesAndroidInjector
abstract fun contributeUploadService(): UploadService
}
然后你可以注入:
class UploadService : BaseTaskService() {
@Inject
lateinit var dataManager: DataManager
...
}
让你的类BaseTaskService
继承DaggerService
或添加AndroidInjection.inject(this)
它的onCreate
方法
推荐阅读
- java - Tomcat在运行时更新java文件
- c++ - 您如何在 C++ 中的不同翻译单元之间共享枚举实例?
- spring-boot - Spring Security JWT REST API 返回 401
- java - 从 Telnet 传递的未知字符串中提取 4 个
- git - 在提交中包含对 git 挂钩文件的更改
- ruby-on-rails - 在视图中选择数据并将它们插入用户数据库
- mysql - 如果没有找到行,则在算术运算中使用一些默认值
- libgdx - Libgdx 设置图像大小
- node.js - 如何在 Node.js 中发送 GET / POST 方法请求参数
- javascript - 为什么数据表添加新记录并保留旧记录?