我刚开始学习柯因的依赖注射。这是我的回购: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上找到此错误:
ComponentInfo{com.anta40.app.diwithkoin/com.anta40.app.diwithkoin.MainActivity}:进程: com.anta40.app.diwithkoin,PID: 6423 java.lang.RuntimeException:无法启动活动
org.koin.core.error.NoBeanDefFoundException:未找到class:'com.anta40.app.diwithkoin.SessionManager'.的定义检查你的定义!
我遗漏了什么?
发布于 2021-07-12 07:22:14
您必须就如何获得SessionManager声明单例或工厂方法
通常,您可以在onCreate类中的Application类中执行此操作:
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
https://stackoverflow.com/questions/68343323
复制相似问题