Строка java.lang.String не может быть предоставлена ​​без конструктора @Inject или метода, аннотированного @ Provides. - PullRequest
0 голосов
/ 04 ноября 2019

Сгенерирована ошибка или и то и другое:

    @Inject
    @Named("DummyString")
    lateinit var dummyString: String

    @Inject
    @Named("SomethingToRemember")
    lateinit var sthToRemember: String

, но все в порядке:

    @Inject
    @Named("MySharedPrefs")
    lateinit var mySharedPreferences: SharedPreferences

Есть ли что-то особенное в предоставлении и использовании String с Dagger?

Мой модуль

    @Provides
    @JvmStatic
    @Singleton
    @Named("MySharedPrefs")
    fun provideMySharedPrefs(context: Context) : SharedPreferences {
        return context.getSharedPreferences("MySharedPrefs", Context.MODE_PRIVATE)
    }

    @Provides
    @JvmStatic
    @Singleton
    @Named("DummyString")
    fun provideDummyString(): String {
        return "dummy dummy"
    }

    @Provides
    @JvmStatic
    @Singleton
    @Named("SomethingToRemember")
    fun provideSthToRemember(@Named("MySharedPrefs") sharedPreferences: SharedPreferences) : String {
        return sharedPreferences.getString("SomethingToRemember", "") ?: ""
    }

Сведения об ошибке:

error: [Dagger/MissingBinding] java.lang.String cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract interface FormsPreviewAppComponent extends dagger.android.AndroidInjector<com.myapp.android.MyApplication> {
                ^
      java.lang.String is injected at
          com.myapp.android.MyLinkActivity.sthToRemember
      com.myapp.android.MyActivity is injected at
          dagger.android.AndroidInjector.inject(T) [com.myapp.android.MyAppComponent → com.myapp.android.MyAppModule_Bindable_ContributesMyActivity.MyActivitySubcomponent]
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myapp:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

1 Ответ

0 голосов
/ 04 ноября 2019

Мне нужно использовать @field:Named("DummyString") вместо @Named("DummyString") https://github.com/google/dagger/issues/848

...