android-如果没有Kotlin中的@ Provides-或@ Produces-Annotated方法,则无法提供上下文
作者:互联网
我在Kotlin中使用Dagger进行依赖注入.现在这里是必要的课程
活动模块
@Module class ActivityModule (val activity : Activity){
@Provides
@ActivityContext
fun provideContext() : Context{
return activity
}
}
活动组件
@PerActivity
@Component(dependencies = arrayOf(ApplicationComponent::class), modules = arrayOf(ActivityModule::class))
interface ActivityComponent {
fun inject(activity: MainActivity)
}
主要活动
@Inject @ActivityContext lateinit var context:Context
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerActivityComponent.builder()
.applicationComponent(MainApplication.getInstance().getApplicationComponent()).activityModule(ActivityModule(this)).build()
.inject(this);
现在我收到以下错误
error: android.content.Context cannot be provided without an @Provides- or @Produces-annotated method.
e:
e: public abstract void inject(@org.jetbrains.annotations.NotNull()
e: ^
e: android.content.Context is injected at
e: app.feed.com.ui.MainActivity.context
e: app.feed.com.ui.MainActivity is injected at
e: app.feed.com.injection.component.ActivityComponent.inject(p0)
我在Java中使用相同的代码并且工作正常,但在kotlin中给出了错误提示,ApplicaionComponent依赖项也正常工作.同时,我正在使用以下版本的gradle和kotlin
buildscript {
ext.kotlin_version = '1.1.2-3'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
请帮助我弄清楚我在做什么错
解决方法:
您注入了财产
@Inject @ActivityContext lateinit var context: Context
仅使用@ActivityContext注释属性.因此,Dagger正在寻找一个没有任何限定符的简单上下文的提供程序.相反,您必须使用它来注释字段
@Inject @field:ActivityContext lateinit var context: Context
标签:dagger-2,kotlin,dependency-injection,android 来源: https://codeday.me/bug/20191110/2015485.html