导入包
1
| implementation ("io.insert-koin:koin-androidx-compose:3.4.5")
|
在app中安装koin
1 2 3 4 5 6 7 8 9 10 11 12
| class RainDropApp:Application(){
override fun onCreate() { super.onCreate()
startKoin { androidLogger(Level.INFO) androidContext(this@RainDropApp) modules(Appmodule) } } }
|
然后看你安装的module
1 2 3 4 5 6 7 8 9 10
| val Appmodule = module { single { MediaReaderImpl(get()) as MediaReader } single { AudioPlayerImpl(get()) as AudioPlayer } viewModel { LocalMusicViewModel(get()) } viewModel { HomeViewModel(get()) } }
|
注入基本对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Logger {
fun print(msg: String) { Log.d(TAG, "Logger print: $msg") } }
val module = module { single { Logger() } }
@Composable fun Greeting(name: String, modifier: Modifier = Modifier) { val logger: Logger = koinInject()
Text( text = "Hello $name!", modifier = modifier.clickable { logger.print("greeting") } ) }
# 日志输出 Logger print: greeting
|
从上面的代码中可以看到,module{}在普通工程和 compose 工程中用法是一致的,只是在获取依赖对象时,compose 中需要使用 koinInject() 方法来获取,此方法也是被@Composable修饰,并且通过remember()来完成内部逻辑实现。
更详细的内容请查看原文,因为他确实不难理解。
引用自掘金