Внедрение класса в услугу - PullRequest
0 голосов
/ 21 октября 2018

Я занимаюсь разработкой приложения для 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 ..
}

1 Ответ

0 голосов
/ 21 октября 2018

Аналогично действиям / фрагментам, используя @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 методе

...