#android #kotlin #dependency-injection #dagger-hilt
#Android #kotlin #внедрение зависимостей #кинжал-рукоять
Вопрос:
Например…У меня есть это:
@InstallIn(ApplicationComponent::class)
@Module
object AlarmInjection {
@Provides
@Singleton
fun proverToday(): Calendar {
return Calendar.getInstance()
}
}
И в моем классе я пытаюсь использовать переменную, которая вводится:
@AndroidEntryPoint
class AlarmFragment : Fragment() {
@Inject lateinit var today : Calendar
....
}
и я получаю ошибку времени выполнения при попытке использовать переменную today.
В нем говорится, что свойство lateinit не создано.
kotlin.UninitializedPropertyAccessException: lateinit property today has not been initialized
Итак, я должен использовать lateinit для ввода чего-либо с помощью hilt, поэтому теоретически значение еще не получено. Но сама инъекция предоставляет экземпляр класса Calendar .
Как я могу это решить?
Комментарии:
1. Ну, теоретически, вышеприведенное может, должно работать, но поскольку вы мало что предоставили, мы не можем точно сказать, в чем проблема. Куда именно вы вводите свойство Calender? Правильно ли вы установили все необходимые аннотации (например,
@AndroidEntryPoint
для действий и фрагментов, регистрации приложения с@HiltAndroidApp
помощью etc)? Пожалуйста, предоставьте больше кода и пример использования2. У меня есть другие инъекции в этом проекте, поэтому я знаю, что все аннотации верны. Я ввел эту переменную в класс Fragment( ), и когда я пытаюсь использовать ее внутри метода, например onCreateView , он выдает свойство lateinit, которое сегодня не было инициализировано.
Ответ №1:
В моем случае тот же код работает нормально.
Вы @AndroidEntryPoint
также прокомментировали действие, в котором используется этот фрагмент?
Согласно документации Android для hilt, действие также должно быть аннотировано, с @AndroidEntryPoint
помощью которого используется этот фрагмент:
Если вы аннотируете класс Android с помощью @AndroidEntryPoint , вы также должны аннотировать классы Android, которые зависят от него. Например, если вы аннотируете фрагмент, вы также должны аннотировать любые действия, в которых вы используете этот фрагмент.