Koin 是什么 Koin 是为 Kotlin 开发者提供的一个实用型轻量级依赖注入框架,采用纯 Kotlin 语言编写而成,仅使用功能解析,无代理、无代码生成、无反射。 Add Jcenter to your repositories if needed repositories { jcenter() } dependencies { // Koin for Android compile "org.koin:koin-android:$koin_version" } 2.比如创建一个HelloRepository来提供一些数据: interface 原理 内联函数 Koin使用了很多的内联函数,它的作用简单来说就是方便进行类型推导,能具体化类型参数。 koin里有一个全局的容器,提供了应用所有所需实例的构造方式,那么当我们需要新建实例的时候,就可以直接从这个容器里面获取到它的构造方式然后拿到所需的依赖,构造出所需的实例就可以了。
增加程序重用 模块功能单一 方便测试 需求变更,减少程序开发 充分的解耦合 Koin是一个Kotin极轻量的依赖注入框架,据官方资料显示,它有一下特点 无代理 无代码生成 无反射。 在app\build.gradle中引入依赖 //koin(依赖注入) implementation "org.koin:koin-androidx-scope:2.0.1" implementation "org.koin:koin-androidx-viewmodel:2.0.1" implementation "org.koin:koin-androidx-ext import org.koin.core.module.Module import org.koin.dsl.module val viewModelModule = module import org.koin.core.module.Module import org.koin.dsl.module val viewModelModule = module
这个问题已经有了成熟的解答:Vue有provide/inject,React有Context+useContext,再往后端看有Spring的@Autowired……在Kotlin跨平台开发中,答案是Koin Koin是一个轻量级、纯Kotlin的依赖注入框架,与Dagger/Hilt的编译期代码生成不同,它完全基于DSL配置,运行时解析依赖——更像前端开发者熟悉的方式。 本文将从前端开发者的视角,带你从零上手Koin,理解依赖注入在ComposeMultiplatform中的完整实践。 快速体验依赖注入运行本课程示例在深入学习之前,先启动本课程的示例,感受Koin依赖注入的实际效果:Web版本(推荐给前端开发者)展开代码语言:BashAI代码解释#克隆项目(如果还没有)gitclone //⭐先启动Koin,注册所有依赖startKoin{modules(appModule)}//再启动ComposeUIComposeViewport(document.body!!)
image.png Koin Koin 与 Dagger 以及 Hilt 相比,管理依赖项的方法完全不同。要在 Koin 中注册依赖项,我们不会使用任何注解,因为Koin不会生成任何代码。 Dagger 生成代码来提供依赖,而 Koin 不生成代码,这实际上带来了一些影响。 1. image.png 在 Koin 中的情况有所不同,因为它不会生成任何代码。 另一方面,在 Koin 中,我们可以看到它花费了很多时间。在 Dagger 中注入依赖也比在 Koin 中快一些。 总结 正如我在本文开始时所说的,我这里的目标不是告诉您要使用哪个库。 我在两个不同的大项目中都使用了 Koin 和 Dagger。老实说,我认为选择 Dagger 还是 Koin 并不重要,重要的是能够让你编写干净、简单且易于单元测试的代码。
本篇是 ardf的第二篇,将介绍基于 DataBinding + Koin 实现的 MVVM 模式页面快速开发框架的使用和详细实现。 Koin 无反射、无代码生成且使用更简单;借助该库可轻松在基于 kotlin 的 Android 应用开发中实现依赖注入,降低代码的耦合性。 更多关于 Koin 的介绍及使用请查阅官方文档:Koin[2] 2. koin,代码如下: val appModule = module { // 将 ViewModel 添加到 koin 依赖 viewModel{ TestViewModel()} } /InsertKoinIO/koin [3] ardf: https://github.com/loongwind/ardf
同时本项目使用Koin作为依赖注入的框架,省去初始化ViewModel、Repository、ViewModelProcider.Factory的过程。 先贴上项目目录,需要关注的是高亮显示的文件(使用Koin省去了Factory类的实现): [image.png] ViewModel类: 实现HomeViewModel类,需要继承继承自ViewModel ") } } }) } } } Koin 初始化: Koin的初始化分为两步: 定义ViewModel,告诉Kioin从哪里找到ViewModel和Repository并自动生成,这里我选择直接写在BaseApplication中,需要注意的是需要定义在最外层 本项目使用开源组件库:koin、timber、permissionx、BaseRecyclerViewAdapterHelper 视频:Android中高级进阶之MVVM与JetPack
Koin(轻量级 DI 框架) Koin 是一个基于 Kotlin DSL 的轻量级依赖注入框架,使用运行时反射,简单易上手。 1. 添加依赖 dependencies { implementation "io.insert-koin:koin-android:3.5.0" } 2. { super.onCreate(savedInstanceState) userRepository.getUsers() } } Koin 总结 依赖注入是现代 Android 开发中不可或缺的设计模式,尤其在结合 Hilt 或 Koin 等框架后,能够显著提升开发效率和代码质量。 1. 推荐选择: 项目规模 推荐框架 理由 中大型项目 Hilt Google 官方推荐,编译时安全,与 Android 组件深度集成 小型项目 / 快速原型 Koin 轻量、无注解处理器、Kotlin DSL
buildSrc/src/main/kotlin/Dependencies.ktobject Versions { const val compose = "1.6.3" const val koin androidx.compose.material3:material3:${Versions.compose}" // DI const val koinCore = "io.insert-koin :koin-core:${Versions.koin}" const val koinAndroid = "io.insert-koin:koin-android:${Versions.koin}
Kotzilla 的核心思路是:既然 KMP 的共享层用 Koin 做依赖注入已经是事实标准,那可观测性就应该从 DI 容器切入。 它的 SDK 直接 hook 了 Koin 的模块解析过程,自动采集: • 模块初始化耗时(包括懒加载触发时机) • 依赖解析链路(谁依赖谁,解析顺序) • 共享层 crash 的完整上下文(包括 DI commonMain.dependencies { implementation("io.kotzilla:kotzilla-sdk:1.x.x") implementation("io.insert-koin 当然,它的局限也很明显——强依赖 Koin。如果你的 KMP 项目用的是手动依赖注入或者 Kodein,Kotzilla 帮不上忙。 但考虑到 Koin 在 KMP 生态里的统治地位(Kotlin Multiplatform 官方 samples 几乎全部使用 Koin),这个押注算合理。
由于 Rudi 最开始是以 Koin 为参考,写的基于函数 API 的依赖注入框架,后来发现 inventory 这个库,就又添加了一套属性宏 API。
官网:mockk.io KOIN 面向 Kotlin 开发者的轻量依赖注入框架。 [1240] KOIN 提供了轻量的函数式依赖注入 DSL,无需代码生成和反射。 startKoin { androidContext(this@MyApplication) modules(myModule) } } } 官网:https://insert-koin.io
因为Helidon SE 缺乏依赖注入的手段,因此为此使用了Koin。 以下代码示例,是包含 main 方法的类。为了实现依赖注入,该类继承自KoinComponent。 首先,Koin 启动,然后初始化所需的依赖并调用startServer()方法—-其中创建了一个WebServer类型的对象,应用程序配置和路由设置传递到该对象; 启动应用程序后在Consul注册: 和 Helidon SE 一样,Ktor 没有开箱即用的 DI,所以在启动服务器依赖项之前应该使用 Koin 注入: val koinModule = module { single { ApplicationInfoService name: "ktor-service" framework { name: "Ktor" release-year: 2018 } } 在 Ktor 和 Koin 在 Koin 中,模块类似于 Spring 框架中的应用程序上下文。
因为Helidon SE 缺乏依赖注入的手段,因此为此使用了Koin。 以下代码示例,是包含 main 方法的类。为了实现依赖注入,该类继承自KoinComponent。 首先,Koin 启动,然后初始化所需的依赖并调用startServer()方法—-其中创建了一个WebServer类型的对象,应用程序配置和路由设置传递到该对象; 启动应用程序后在Consul注册: object 和 Helidon SE 一样,Ktor 没有开箱即用的 DI,所以在启动服务器依赖项之前应该使用 Koin 注入: val koinModule = module { single { ApplicationInfoService application-info { name: "ktor-service" framework { name: "Ktor" release-year: 2018 } } 在 Ktor 和 Koin 在 Koin 中,模块类似于 Spring 框架中的应用程序上下文。
因为Helidon SE 缺乏依赖注入的手段,因此为此使用了Koin。 以下代码示例,是包含 main 方法的类。为了实现依赖注入,该类继承自KoinComponent。 首先,Koin 启动,然后初始化所需的依赖并调用startServer()方法—-其中创建了一个WebServer类型的对象,应用程序配置和路由设置传递到该对象; 启动应用程序后在Consul注册: 和 Helidon SE 一样,Ktor 没有开箱即用的 DI,所以在启动服务器依赖项之前应该使用 Koin 注入: val koinModule = module { single { ApplicationInfoService name: "ktor-service" framework { name: "Ktor" release-year: 2018 } } 在 Ktor 和 Koin 在 Koin 中,模块类似于 Spring 框架中的应用程序上下文。
EasyPermission 更多介绍见:EasyPermission[1] ardf更多文章: Android基于DataBinding封装RecyclerView实现快速列表开发 Android基于DataBinding+Koin BaseBindingViewModelActivity、BaseFragment、BaseBindingFragemnt、BaseBindingViewModelFragment 关于其他几个基类的使用见:Android基于DataBinding+Koin
状态管理与导航状态管理:使用 mutableStateOf 或 ViewModel(通过 koin 或 kodein 注入)。
Koin ? 随着 Kotlin 被越来越多地用于移动和服务端开发,其相关生态系统也在不断发展。Koin 是一个Kotlin框架,用于处理软件开发中的常规问题之一:依赖注入。 尽管有多种 Kotlin 依赖注入框架可供选择,我们的团队更喜欢 Koin 的简单性。Koin 避免使用注解,而是通过构造函数或模仿 Kotlin 的延迟初始化,从而仅在需要时才注入对象。
图像编辑器 Monica Monica 是一款跨平台的桌面图像编辑器,使用 Kotlin Compose Desktop 进行开发基于 mvvm 架构,使用 koin 作为依赖注入的框架。
许多流行的库已经采用了 Kotlin Multiplatform,包括异步事件处理框架 Ktor、类型安全的 SQL API 生成器 SQLDelight、GraphQL 客户端 Apollo 和依赖注入框架 Koin
比如我每次让 AI 写 Android 代码,都要说: • 用 Hilt 做依赖注入,不要用 Koin • 状态管理用 sealed class + StateFlow,不要用 LiveData • Repository references/conventions.md:- 语言:优先 Kotlin - 架构:MVVM + Repository - 异步:suspend + Flow/StateFlow - DI:Hilt(禁止 Koin