如果没有kotlin中的@ Provide-或@ Produces注解方法,则不能提供上下文

我在Kotlin使用Dagger进行依赖注入。 现在这里是必要的类

ActivityModule

@Module class ActivityModule (val activity : Activity){ @Provides @ActivityContext fun provideContext() : Context{ return activity } } 

ActivityComponent

 @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正在寻找一个没有限定符的简单Context的提供者。 相反,你必须用它来注释该字段

 @Inject @field:ActivityContext lateinit var context: Context