gpt4 book ai didi

android - Kotlin Dagger 不注入(inject)

转载 作者:行者123 更新时间:2023-11-29 19:02:42 24 4
gpt4 key购买 nike

我最近从 java 转向 kotlin,并尝试实现依赖注入(inject)的 dagger 2。

我已经把这个添加到我的gradle中了

apply plugin: 'kotlin-kapt'

implementation "com.google.dagger:dagger:2.11"
kapt "com.google.dagger:dagger-compiler:2.11"
compileOnly 'javax.annotation:jsr250-api:1.0'

这是我的模块

@Module
class AppModule(val context : Context) {
@Provides
@Singleton
fun provideContext() = context
}

这是我的组件

@Singleton
@Component(modules = arrayOf(AppModule::class))
interface AppComponent {
fun inject(application: Application)
}

这是我的申请

class MyApplication : Application() {
@Inject
lateinit var context : Context

lateinit var appComponent : AppComponent

override fun onCreate() {
super.onCreate()

appComponent = DaggerAppComponent.builder()
.appModule(AppModule(this.applicationContext))
.build()
appComponent.inject(this)
}
}

这是我的 Activity

class SplashActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)

val context = (applicationContext as MyApplication).context
}
}

我得到了这个错误

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property context has not been initialized

这段代码在 Java 中运行,知道如何解决这个问题吗?

最佳答案

context 属性在 MyApplication 类中声明,但您要在此处注入(inject) Application 基类:

fun inject(application: Application)

... 没有可注入(inject)的特性。您必须在您的组件中为特定类创建一个 inject 方法:

fun inject(application: MyApplication)

Here's一个解释如何更详细地使用带有层次结构的 Dagger 的答案。

关于android - Kotlin Dagger 不注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48374651/

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