Intereting Posts

Kotlin + Dagger2: не может быть предоставлен без конструктора @Inject или из метода @ Provides- или @ Produces-annotated

Я получаю следующую ошибку:

Ошибка: (8, 1): java.lang.String не может быть предоставлена ​​без конструктора @Inject или из метода @ Provides- или @ Produces-annotated.

Я застрял, пытаясь создать модуль, который предоставляет две квалифицированные строки. Вот упрощенная установка кинжала.

@Singleton @Component(modules = [GreetingsModule::class]) interface AppComponent { fun inject(activity: MainActivity) } @Qualifier annotation class Spanish @Qualifier annotation class French @Qualifier annotation class English @Module @Singleton class GreetingsModule { @Provides @Spanish fun providesHola(): String = "Hola mundo! - From Dagger" @Provides @English fun providesHello(): String = "Hello world! - From Dagger" } 

Инъекция выполняется в MainActivity как:

 class MainActivity : AppCompatActivity() { @Inject @Spanish lateinit var holaMundoText: String @Inject @English lateinit var helloWorldText: String } 

Я также попытался объявить геттеры непосредственно в компоненте, но с той же ошибкой не получилось. То же самое при объявлении модульных методов как статических.

Как и должно быть, код работает нормально только с одним @Provide , затем строка вводится в оба поля. Я предполагаю, что проблема связана с квалификатором.

Любая помощь высоко ценится.


С помощью:

  • Android Studio 3.0.1
  • Котлин 1.2.10
  • Кинжал 2.14.1

Существует немного получения с квалифицированной и названной инъекцией с JSR-330 + Kotlin (Dagger2 – это реализация). Недавно просмотрев отставание проекта Dagger2 в Github, я знаю, что команда Google стремится обеспечить более активную помощь / более полезные сообщения об ошибках в предстоящем выпуске (без шкалы времени).

То, что вам не хватает, это @field:<Qualifier> использования @field:<Qualifier> как описано в связанной документации. Поэтому постарайтесь;

 @Inject @field:Spanish lateinit var holaMundoText: String