kotlin.jvm.functions.函数1<? super java.lang.String,kotlin.Unit> 不能在没有 @Provides-annotated 方法的情况下提供
kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> cannot be provided without an @Provides-annotated method
用法/注射:
@Inject
@field:Named("MyStringSaverFunction")
lateinit var stringSaverFunction: (String) -> Unit
我的模块
@Module(includes = [AbcModule.UiBinding::class])
object AbcModule {
@Module
interface UiBinding {
@PerFragment
@ContributesAndroidInjector
fun provideFragment(): AbcFragment
}
@Provides
@JvmStatic
@Singleton
@Named("AbcSharedPrefs")
fun provideAbcSharedPrefs(context: Context) : SharedPreferences {
return context.getSharedPreferences("AbcSharedPrefs", Context.MODE_PRIVATE)
}
@Provides
@JvmStatic
@Singleton
@Named("MyStringSaverFunction")
fun provideDfIntentSaver(@Named("AbcSharedPrefs") sharedPreferences: SharedPreferences): (String) -> Unit {
return { theString: String ->
sharedPreferences.edit().putString("TheKey", theString).apply()
}
}
}
错误详情:
error: [Dagger/MissingBinding] @javax.inject.Named("MyStringSaverFunction") kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> cannot be provided without an @Provides-annotated method.
public abstract interface MyAppComponent extends dagger.android.AndroidInjector<com.myapp.android.MyApplication> {
^
@javax.inject.Named("MyStringSaverFunction") kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> is injected at
com.myapp.android.AbcFragment.stringSaverFunction
com.myapp.android.AbcFragment is injected at
> Task :myapp:kaptDebugKotlin FAILED
dagger.android.AndroidInjector.inject(T) [com.myapp.android.di.MyAppComponent → com.myapp.android.di.AbcModule_Bindable_ProvideFragment.AbcFragmentSubcomponent]
FAILURE: Build failed with an exception.
在注入部位使用@JvmSuppressWildcards
匹配签名-
@Inject
@field:Named("MyStringSaverFunction")
@JvmSuppressWildcards
lateinit var stringSaverFunction: (String) -> Unit
用法/注射:
@Inject
@field:Named("MyStringSaverFunction")
lateinit var stringSaverFunction: (String) -> Unit
我的模块
@Module(includes = [AbcModule.UiBinding::class])
object AbcModule {
@Module
interface UiBinding {
@PerFragment
@ContributesAndroidInjector
fun provideFragment(): AbcFragment
}
@Provides
@JvmStatic
@Singleton
@Named("AbcSharedPrefs")
fun provideAbcSharedPrefs(context: Context) : SharedPreferences {
return context.getSharedPreferences("AbcSharedPrefs", Context.MODE_PRIVATE)
}
@Provides
@JvmStatic
@Singleton
@Named("MyStringSaverFunction")
fun provideDfIntentSaver(@Named("AbcSharedPrefs") sharedPreferences: SharedPreferences): (String) -> Unit {
return { theString: String ->
sharedPreferences.edit().putString("TheKey", theString).apply()
}
}
}
错误详情:
error: [Dagger/MissingBinding] @javax.inject.Named("MyStringSaverFunction") kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> cannot be provided without an @Provides-annotated method.
public abstract interface MyAppComponent extends dagger.android.AndroidInjector<com.myapp.android.MyApplication> {
^
@javax.inject.Named("MyStringSaverFunction") kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> is injected at
com.myapp.android.AbcFragment.stringSaverFunction
com.myapp.android.AbcFragment is injected at
> Task :myapp:kaptDebugKotlin FAILED
dagger.android.AndroidInjector.inject(T) [com.myapp.android.di.MyAppComponent → com.myapp.android.di.AbcModule_Bindable_ProvideFragment.AbcFragmentSubcomponent]
FAILURE: Build failed with an exception.
在注入部位使用@JvmSuppressWildcards
匹配签名-
@Inject
@field:Named("MyStringSaverFunction")
@JvmSuppressWildcards
lateinit var stringSaverFunction: (String) -> Unit