【发布时间】:2021-07-12 07:15:14
【问题描述】:
我刚开始学习 Koin 的依赖注入。这是我的仓库: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 类注入 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 上发现这个错误:
进程:com.anta40.app.diwithkoin,PID:6423 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.anta40.app.diwithkoin/com.anta40.app.diwithkoin.MainActivity}: org.koin.core.error.NoBeanDefFoundException:找不到定义 类:'com.anta40.app.diwithkoin.SessionManager'。检查你的 定义!
我错过了什么?
【问题讨论】: