我刚刚开始学习 Koin 的依赖注入(inject)。这是我的仓库:https://github.com/anta40/DIWithKoin
这是概述。首先创建一个 SessionManager 类,用于存储和读取字符串值:
import android.content.Context
import android.content.SharedPreferences
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
val sessionModule = module {
single { SessionManager(androidContext()) }
}
class SessionManager (context: Context) {
private val preferences: SharedPreferences = context.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
private val MY_CUSTOM_STR = "test"
init {
saveStringValue("Hello world 12345")
}
private fun saveStringValue(content: String) {
preferences.edit().putString(MY_CUSTOM_STR, content).apply()
}
fun getStringValue(): String? {
return preferences.getString(MY_CUSTOM_STR, "")
}
}
然后使用Koin将SessionManager类注入(inject)到MainActivity中:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.anta40.app.diwithkoin.databinding.ActivityMainBinding
import org.koin.android.ext.android.inject
class MainActivity : AppCompatActivity() {
private val session: SessionManager by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// Should print "Hello world 12345"
binding.txtValue.text = session.getStringValue()
}
}
但是它崩溃了。在logcat上发现这个错误:
Process: com.anta40.app.diwithkoin, PID: 6423 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.anta40.app.diwithkoin/com.anta40.app.diwithkoin.MainActivity}: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.anta40.app.diwithkoin.SessionManager'. Check your definitions!
我错过了什么?
最佳答案
您必须声明单例或工厂方法来获取SessionManager
通常,您可以通过 Application
类中的 onCreate
执行此操作:
class YourApp : Application() {
override fun onCreate() {
startKoin {
androidContext(app)
androidLogger()
val modules = listOf(
module {
/*or however you construct it*/
factory<SessionManager>{ SessionManager(get()) }
}
)
loadKoinModules(modules)
}
}
}
提供的示例使用 koin 2.1.5
关于android - Koin错误: org. koin.core.error.NoBeanDefFoundException。如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68343323/