У меня есть проект Android с внедрением зависимостей Hilt. Я определил MyApplication
и MyModule
следующим образом.
@HiltAndroidApp
class MyApplication : Application()
@Module
@InstallIn(ApplicationComponent::class)
abstract class MyModule {
@Binds
@Singleton
abstract fun bindMyRepository(
myRepositoryImpl: MyRepositoryImpl
): MyRepository
}
MyRepositoryImpl
реализует интерфейс MyRepository
:
interface MyRepository {
fun doSomething(): String
}
class MyRepositoryImpl
@Inject
constructor(
) : MyRepository {
override fun doSomething() = ""
}
Теперь я могу внедрить эту реализацию MyRepository
в ViewModel:
class MyActivityViewModel
@ViewModelInject
constructor(
private val myRepository: MyRepository,
) : ViewModel() { }
Это работает, как ожидалось. Однако, если я попытаюсь внедрить репозиторий в службу, я получаю сообщение об ошибке java.lang.Class<MyService> has no zero argument constructor
:
class MyService
@Inject
constructor(
private val myRepository: MyRepository,
): Service() { }
Та же ошибка возникает и с действием:
class MyActivity
@Inject
constructor(
private val myRepository: MyRepository,
) : AppCompatActivity(R.layout.my_layout) { }
Что я делаю не так с уколом?
Activity
илиService
. Используйте полевую инъекцию. - person Bek   schedule 07.09.2020