Koin 团队非常高兴地宣布 Koin 4.0 正式发布. 新版本改进了 Kotlin, Android, Compose 和跨平台 API.
新版本基于Kotlin 2.0, 引入了大量增强功能和 Compose 跨平台功能, 同时还删除了一些重要的旧 API.
让我们来回顾一下这个版本的功能亮点以及对新版本的期待.
本次更新充分利用了 Kotlin 的最新特性, 尤其是在跨平台领域, 跨平台生成一致的 UUID.
请确保使用至少 2.0.20 版本设置你的项目, 因为使用早期版本可能会因为新的 KMP API 而导致崩溃.
为所有平台生成真正的 UUID
使用 Kotlin 的 kotlin.uuid.Uuid
API, 所有 KMP 目标现在都完全支持 UUID 生成. 这可确保 KoinPlatformTools.generateId()
在所有环境中生成唯一的, 与平台无关的 UUID.
内部优化
Koin 的内部架构进行了重大优化, 包括:
- 上下文传递: 改进了注入参数的处理方式, 允许根据注入参数, 定义和作用域采用更动态, 更灵活的解析顺序.
- 更多线程安全且高效的集合: 内部注册表现在使用更好的集合, 以确保并发环境中的稳定性.
- Kotlin Time API: 用标准化的 Kotlin Time API 取代了旧的时间测量 API, 简化了内部结构.
Koin-Fu 项目(实验性)
我们对 Koin-Fu 感到非常兴奋. 目前, 它还处于实验阶段. 我们的想法是开始重新思考 Koin DSL. 这将解决构造函数 DSL 的局限性, 在构造函数 DSL 中, 我们需要维护类型的静态Compose, 这就阻碍了我们传递可空参数.
我们需要保留没有get()
需求的 lambda API, 并在 singleOf
API 上提供更好的统一体验. 此外, 我们还需要更好的内部数据, 以更全面地覆盖配置检查.
ViewModel API: 现在的跨平台
Koin 4.0对 ViewModel API 进行了重大改进, 过渡到完全的跨平台方法. 新的koin-core-viewmodel
包集中了 ViewModel API, 使它们可以在不同平台上重复使用.
- 旧的 ViewModel DSL 现已弃用, 新的 API 支持与 Android, Jetpack Compose 和其他框架更好地集成. 你将在配置中看到弃用警告. 你只需将imports变更为
org.koin.core.module.dsl.
, 就能轻松消除该警告. - 我们为 Compose ViewModel Navigation 添加了新的支持, 包括改进的参数注入和与 Compose Navigation 1.7 的兼容性. 所有这些都基于最新的Navigation库.
使用 Compose Multiplatform 的 koinViewModel
AndroidX Startup: 优化加载
一个新的 Gradle 包koin-androidx-startup
优化了AndroidX Startup的启动过程. 这可减少多达 40% 的加载时间, 从而提高使用 Koin 的应用的性能. onKoinStartup
委托允许开发人员在应用的初始代码块中声明启动配置.
请注意, 你可以混合使用 Koin androidx-startup 和 Lazy Modules, 以优化加载, 获得最佳性能.
Activity与Fragment作用域修复
此版本修复了与 Android Activity
和 Fragment
的作用域传播相关的问题, 从而确保在整个应用生命周期中进行更可靠的上下文管理.
为 Compose 提供更好的跨平台支持
我们重新设计了 Koin 的 Compose API, 以添加对更多跨平台功能的支持. 现在, koin-androidx-compose
和koin-compose-viewmodel
API 共享一个共同的代码库, 从而可以在Android和其他平台上更轻松地进行集成和代码重用.
- 完整的Compose生命周期处理:
KoinApplication
现在能更优雅地处理生命周期事件, 允许在需要时重新启动上下文, 而不会破坏作用域或导致重组问题. - 稳定的 Wasm 集成: 我们更新了对 WebAssembly (Wasm) 的支持, 以继续跟进在网络环境中使用 Koin 的新可能性.
参数注入
现在, 你可以通过相关的 Verify API 充分利用已注入参数. 这样, 你就可以将应用中使用已注入参数动态行为的动态部分声明为 Verify()
所覆盖.
现在, 你可以为每种定义类型使用 defintion
函数, 并将其绑定到作为注入参数的类列表. 在下文中, 我们将 ComponentA
定义为注入到 ComponentB
中:
myModule.verify(
injections = injectedParameters(
definition<ComponentB>(ComponentA::class)
)
)
缺失定义或参数的生成
现在, Verify()
API 可自动生成缺失的定义的修复程序, 从而更容易在测试过程中捕获并解决依赖性问题. 此外, 还改进了已注入参数验证, 以检测参数的缺失或不正确.
以下是 Verify 检测到配置中缺少类型时的代码建议示例:
提议相关代码以帮助修复定义或参数的注入
我们在最新的 Ktor 2.x 版本上更新了 Ktor 集成支持, 并添加了作用域管理修复. 现在, 每个作用域实例都能通过基于 UUID 的 ID 清晰识别, 以避免路由请求冲突.
稍后还将推出 Ktor 3 的新集成. 敬请期待!
废弃和 API 清理
Koin 先前版本中废弃的几个 API 现已正式移除:
- CheckModules: 已废弃, 将由更现代, 更高效的
Verify()
API 取代. - ViewModel DSL: 已被弃用, 将由基于新的跨平台 API 的名为
koin-core-viewmodel
的集中式 API 取而代之. 这也避免了所有 ViewModel 功能的重复, 现在我们可以从完整的跨平台 API 中受益. - 基于反射的 API: 不再支持旧的
KoinReflect API
(2.x 版). 已移除@KoinReflectAPI
注解和Builder/newInstance
API, 标志着向更好的反射处理过渡. - Android ViewModel API: 删除了
Activity
和Fragment
的stateViewModel
和sharedStateViewModel
等过时方法. - Compose API: 删除了旧的已废弃方法, 如
get
,inject
和stateViewModel
等, 转而使用较新的 Compose 集成.
重命名
为使错误更清晰, 已将 ApplicationAlreadyStartedException
重命名为 KoinApplicationAlreadyStartedException
.
在此版本中, 我们尝试改进文档:
- 软件包信息: 所有软件包信息都转移到了 Koin 网站上, 从而消除了项目 README 文件中的杂乱信息. 你可以在 setup 文档 上找到它们.
- 更新指南: 新改进的指南涵盖 Compose 集成, 独立的上下文和各种高级用例. 请查看更新后的 compose 文档.
Koin 4.0 标志着 Kotlin 中的依赖注入向前迈进了一大步, 尤其是 Compose 的跨平台功能. 该版本包含一些实验性功能, Koin 团队渴望社区提供反馈, 以指导未来的开发工作, 尤其是在新的Koin-Fu DSL 和AndroidX Startup 优化方面.
随着 Kotlin 的不断发展, Koin 将继续致力于提供一个现代, 灵活, 强大的 DI 框架, 该框架可跨平台无缝运行, 使开发人员能够轻松构建可扩展, 可维护的应用.
今天的内容就分享到这里啦!
一家之言, 欢迎拍砖!
Happy Coding! Stay GOLDEN!