gpt4 book ai didi

android - 在 kotlin 中没有 @Provides- 或 @Produces-annotated 方法无法提供上下文

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:23 25 4
gpt4 key购买 nike

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

Activity 模块

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

Activity 组件

@PerActivity
@Component(dependencies = arrayOf(ApplicationComponent::class), modules = arrayOf(ActivityModule::class))
interface ActivityComponent {
fun inject(activity: MainActivity)
}

主 Activity

@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)了属性

@Inject @ActivityContext lateinit var context: Context

仅使用 @ActivityContext 注释该属性。所以 Dagger 正在寻找一个没有任何限定符的简单 Context 的提供者。相反,您必须用它来注释该字段

@Inject @field:ActivityContext lateinit var context: Context

关于android - 在 kotlin 中没有 @Provides- 或 @Produces-annotated 方法无法提供上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46904260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com