首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Koin可空(可选) bean

Koin可空(可选) bean
EN

Stack Overflow用户
提问于 2019-08-16 23:27:18
回答 1查看 1.3K关注 0票数 1

我希望在我的koin应用程序中有一个可空的bean,比如:

代码语言:javascript
复制
single(named("NULLABLE")) {
    System.getenv("NULLABLE")
}

即,如果设置了环境变量"NULLABLE“,则名为"NULLABLE”的bean (此处为字符串)将具有其值,否则将为null。

用法可能如下:

代码语言:javascript
复制
init {
    startKoin {
        modules(listOf(module))
    }
}

val nullableString: String? by inject(named("NULLABLE"))

但是,如果没有名为"NULLABLE“的环境变量,我会得到一个异常:

代码语言:javascript
复制
Exception in thread "main" java.lang.IllegalStateException: Single instance created couldn't return value
    at org.koin.core.instance.SingleDefinitionInstance.get(SingleDefinitionInstance.kt:42)
    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)

这是因为当工厂的lambda返回null时,SingleDefinitionInstance会抛出一个异常:

代码语言:javascript
复制
override fun <T> get(context: InstanceContext): T {
    if (value == null) {
        value = create(context)
    }
    return value as? T ?: error("Single instance created couldn't return value")
}

在Koin中可以有一个可空(可选)的bean吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-14 14:30:47

我没有找到一种有效的官方方式。我用下面的代码片段解决了我的问题:

代码语言:javascript
复制
   val data: ClassModel? = try {
        get(named("YourNamedValue"))
    } catch (e: InstanceCreationException) {
        null
    } catch (e: IllegalStateException) {
        null
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57527303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档