Koin 4.0 正式发布啦!

社区移动开发Android
Koin 4.0 - 正式发布

Koin 团队非常高兴地宣布 Koin 4.0 正式发布. 新版本改进了 Kotlin, Android, Compose 和跨平台 API.

picture.image

新版本基于Kotlin 2.0, 引入了大量增强功能和 Compose 跨平台功能, 同时还删除了一些重要的旧 API.

让我们来回顾一下这个版本的功能亮点以及对新版本的期待.

Kotlin 2.0.20: 新基线

本次更新充分利用了 Kotlin 的最新特性, 尤其是在跨平台领域, 跨平台生成一致的 UUID.

请确保使用至少 2.0.20 版本设置你的项目, 因为使用早期版本可能会因为新的 KMP API 而导致崩溃.

在 Core & 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 上提供更好的统一体验. 此外, 我们还需要更好的内部数据, 以更全面地覆盖配置检查.

Android 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库.

picture.image

使用 Compose Multiplatform 的 koinViewModel

AndroidX Startup: 优化加载

一个新的 Gradle 包koin-androidx-startup优化了AndroidX Startup的启动过程. 这可减少多达 40% 的加载时间, 从而提高使用 Koin 的应用的性能. onKoinStartup 委托允许开发人员在应用的初始代码块中声明启动配置.

请注意, 你可以混合使用 Koin androidx-startup 和 Lazy Modules, 以优化加载, 获得最佳性能.

Activity与Fragment作用域修复

此版本修复了与 Android ActivityFragment 的作用域传播相关的问题, 从而确保在整个应用生命周期中进行更可靠的上下文管理.

Compose API 改进

为 Compose 提供更好的跨平台支持

我们重新设计了 Koin 的 Compose API, 以添加对更多跨平台功能的支持. 现在, koin-androidx-composekoin-compose-viewmodel API 共享一个共同的代码库, 从而可以在Android和其他平台上更轻松地进行集成和代码重用.

  • 完整的Compose生命周期处理: KoinApplication 现在能更优雅地处理生命周期事件, 允许在需要时重新启动上下文, 而不会破坏作用域或导致重组问题.
  • 稳定的 Wasm 集成: 我们更新了对 WebAssembly (Wasm) 的支持, 以继续跟进在网络环境中使用 Koin 的新可能性.
Testing API 的增强功能

参数注入

现在, 你可以通过相关的 Verify API 充分利用已注入参数. 这样, 你就可以将应用中使用已注入参数动态行为的动态部分声明为 Verify() 所覆盖.

现在, 你可以为每种定义类型使用 defintion 函数, 并将其绑定到作为注入参数的类列表. 在下文中, 我们将 ComponentA 定义为注入到 ComponentB 中:

myModule.verify(
    injections = injectedParameters(
        definition<ComponentB>(ComponentA::class)
    )
)

缺失定义或参数的生成

现在, Verify() API 可自动生成缺失的定义的修复程序, 从而更容易在测试过程中捕获并解决依赖性问题. 此外, 还改进了已注入参数验证, 以检测参数的缺失或不正确.

以下是 Verify 检测到配置中缺少类型时的代码建议示例:

picture.image

提议相关代码以帮助修复定义或参数的注入

Ktor API 更新

我们在最新的 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: 删除了 ActivityFragmentstateViewModelsharedStateViewModel 等过时方法.
  • Compose API: 删除了旧的已废弃方法, 如 get, injectstateViewModel 等, 转而使用较新的 Compose 集成.

重命名

为使错误更清晰, 已将 ApplicationAlreadyStartedException 重命名为 KoinApplicationAlreadyStartedException.

文档和资源

在此版本中, 我们尝试改进文档:

  • 软件包信息: 所有软件包信息都转移到了 Koin 网站上, 从而消除了项目 README 文件中的杂乱信息. 你可以在 setup 文档 上找到它们.
  • 更新指南: 新改进的指南涵盖 Compose 集成, 独立的上下文和各种高级用例. 请查看更新后的 compose 文档.
展望未来

Koin 4.0 标志着 Kotlin 中的依赖注入向前迈进了一大步, 尤其是 Compose 的跨平台功能. 该版本包含一些实验性功能, Koin 团队渴望社区提供反馈, 以指导未来的开发工作, 尤其是在新的Koin-Fu DSLAndroidX Startup 优化方面.

随着 Kotlin 的不断发展, Koin 将继续致力于提供一个现代, 灵活, 强大的 DI 框架, 该框架可跨平台无缝运行, 使开发人员能够轻松构建可扩展, 可维护的应用.

今天的内容就分享到这里啦!

一家之言, 欢迎拍砖!

Happy Coding! Stay GOLDEN!

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论