我有一个Java应用程序类,不能将其更改为Kotlin。我像这样初始化Koin:
KoinApplication koinApp = KoinApplication.create()
.printLogger()
.modules(
myModule
);
start(koinApp);
我的模块是在另一个文件中创建的:
@JvmField
val myModule = module {
single { DateUtil(androidContext()) }
factory<ListPresenterContract> { MyListPresenter() }
}
但是,当我访问该文件DateUtil
时,遇到关于androidContext()
的错误:
Caused by: org.koin.android.error.MissingAndroidContextException: Can't resolve Context instance. Please use androidContext() function in your KoinApplication configuration.
at org.koin.android.ext.koin.ModuleExtKt.androidContext(ModuleExt.kt:33)
at koin.MyKoinModulesKt$MyModule$1$1.invoke(MyKoinModules.kt:16)
at koin.MyKoinModulesKt$MyModule$1$1.invoke(Unknown Source:4)
at org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:54)
at org.koin.core.instance.SingleDefinitionInstance.get(SingleDefinitionInstance.kt:40)
at org.koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)
at org.koin.core.scope.Scope.get(Scope.kt:128)
at view.MyViewerListAdapter$$special$$inlined$inject$1.invoke(Scope.kt:327)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at view.MyViewerListAdapter.getDateUtil(Unknown Source:7)
at view.MyViewerListAdapter.setModelView(MyListAdapter.kt:77)
at view.MyViewerListAdapter.onBindViewHolder(MyViewerListAdapter.kt:45)
at view.MyViewerListAdapter.onBindViewHolder(MyListAdapter.kt:27)
我怀疑恰好在应用程序类之前 初始化了我的模块,并且为androidContext
获取了空值。而且只有当我实际访问应该具有上下文的文件时,它才不会延迟进行初始化,而我仍然具有空上下文。我不知道如何在Java应用程序类中解决此问题,因此与此同时我从模块中删除了上下文。
答案 0 :(得分:0)
基于最新版本2.0.1标准
在AppModult.kt
val appContext = module {
single(named("appContext")) { androidContext() }
}
在Application.kt
startKoin {
androidContext(this@App)
androidFileProperties()
modules(listOf(appContext))
}
答案 1 :(得分:0)
创建Kotlin klass(JavaKoinApplication.kt)
fun start(myApplication: Application) {
startKoin(listOf(module)) with (myApplication)}
然后在Java应用程序类中调用该类
JavaKoinApplication.start(this);