Всякий раз, когда я использую аннотацию @Named в своем коде, я всегда получаю «java.lang.String не может быть предоставлен без конструктора @Inject или метода с аннотацией @Provides». эта ошибка Пожалуйста, найдите фрагменты кода ниже, но перед проверкой кода позвольте мне разъяснить вам, чего я хочу достичь, и с какой именно проблемой я столкнулся. Итак, я пытаюсь сохранить две функции в моем файле модуля, которые возвращают тот же тип, что и String, для этого я пытаюсь использовать аннотацию @Named, и после этого я получаю вышеупомянутую ошибку, и если я сохраняю только одну функцию для типа String, тогда мой проект работает без ошибок.
Это мой класс компонентов
@Singleton
@Component(modules = [GeneralModules::class])
interface MainComponent {
fun dummyString():String
}
Это мой класс модуля
@Module
class GeneralModules {
@Provides
@Singleton
@Named("name1")
fun getDummyString1(): String{
return "some name"
}
@Provides
@Singleton
@Named("name2")
fun getDummyString(): String{
return "some name"
}
}
Вот как я использую внутри класса Activity
@Inject
@field:Named("name1")
lateinit var name1: String
@Inject
@field:Named("name2")
lateinit var name2: String
Поэтому, если я удалю @Named из файла модуля, удалю одну функцию и удалю код @field:Named из активности, он будет работать без ошибок.
1 ответ
Вы можете использовать annotation class
с @Qualifier
из javax.inject.Qualifier
.
Файл квалификатора
@Qualifier
annotation class Name1
@Qualifier
annotation class Name2
Класс модуля
@Module
class GeneralModules {
@Provides
@Singleton
@Name1
fun getDummyString1(): String{
return "some name"
}
@Provides
@Singleton
@Name2
fun getDummyString(): String{
return "some name"
}
}
Код внутри класса Activity
@Inject
@Name1
lateinit var name1: String
@Inject
@Name2
lateinit var name2: String
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.