Получение не может быть обеспечено без конструктора @Inject или с помощью аннотированного метода @ Provides- или @ Produces. на котлин кинжал2 - PullRequest
0 голосов
/ 15 января 2019
error: app.sareing.core.sharedPrefs.StringPreference cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
public abstract void inject(@org.jetbrains.annotations.NotNull()
                     ^
  app.sareing.core.sharedPrefs.StringPreference is injected at
      app.sareing.activity.MainActivity.authToken
  app.sareing.activity.MainActivity is injected at
      app.sareing.injection.component.ActivityComponent.inject(activity)

Пробованные Именованные поля, все еще не удача решить это.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Исправлено решением здесь https://stackoverflow.com/a/48057282/9821453

Я не использовал @fields: qualifier_name при инъекции.

Спасибо

0 голосов
/ 16 января 2019

В Dagger у вас есть два способа предоставить объект

  1. Использование @Inject в конструкции

Пример:

UserRepository @Inject конструктор (private val mContext: Context)

  1. Но как мы можем @Inject конструктор с каким-либо классом сторонних разработчиков, таких как Retrofit Service Interface? Вот почему у Dagger есть @ Provide

Пример:

@Module class AppModule { @Provides fun provideContext(application: Application): Context = application.applicationContext }

Кинжал также имеет другой способ предоставить объект

Вы можете прочитать больше здесь

В вашем случае вы можете предоставить свой класс StringPreference в своем модуле приложения, например, AppModule

@Module class AppModule { @Provides fun provideStringPreference(context: Context): StringPreference = StringPreference(context) }

...