Могу ли я ввести значение переменной с помощью Hilt?

#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, которые зависят от него. Например, если вы аннотируете фрагмент, вы также должны аннотировать любые действия, в которых вы используете этот фрагмент.