首页 > 解决方案 > 将类注入服务

问题描述

我正在开发一个 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 ..
}

标签: androidmvvmservicekotlinbackground

解决方案


与活动/片段相同的方式使用@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方法


推荐阅读