gpt4 book ai didi

javascript - 如何在针对 JavaScript 的 Kotlin 中使用依赖注入(inject)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:38 26 4
gpt4 key购买 nike

我目前正在评估将大型 Java/Swing 应用程序移植到 Kotlin。该应用程序的领域是 2D 图形、图形、图形编辑和模拟/动画。我想用 Kotlin 重写整个应用程序核心,并将其转换为 Java 字节码和 JavaScript。我目前能够使用一些适配器和桥接类编写在 Java 窗口和 HTML Canvas 中呈现的 Kotlin 绘图代码。到目前为止一切顺利。

现在我正在为依赖注入(inject)而苦苦挣扎,我在我的应用程序中大量使用它。我想在我的 Kotlin 类中注入(inject)依赖项,并且仍然能够将它们转换为 JVM 和 JavaScript,因此我寻找了 Kotlin 的 DI 框架。我找到了 injektkodein ,但看起来它们都依赖于 JDK 类,因此它们不适用于我的 JavaScript 用例。因此,我开始开发自己的纯 Kotlin DI 框架,进展顺利,直到我意识到用于 JavaScript 的 Kotlin 转译器尚不支持反射,否则您无法进行依赖注入(inject)。

有人知道 JetBrains 计划在不久的将来在他们的 JavaScript 转译器中支持反射吗?或者有人知道另一种使用依赖注入(inject)编写纯 Kotlin 代码的方法,并且仍然可以将其转换为 Java 和 JavaScript 吗?这个问题可能会成为我项目的 Kotlin 展示障碍,因为我不确定我是否想回到静态可配置工厂。

最佳答案

在 Kotlin 中支持反射到 JavaScript 编译器是一件棘手的事情。最糟糕的是,您必须以某种方式将元数据存储在 JS 文件中,这会使 JS 文件变大,而且与 JAR 不同,JAR 可以根据需要变大,拥有小的 JS 文件非常重要。此外,您必须捆绑解压缩此元数据并公开反射 API 的代码,这会使生成的 JS 代码变得更大。

我不确定是否会为 JS 编译器实现反射(或者如果会,很可能不会推荐实现 DI 之类的方法)。它肯定不会在 1.1 中可用。相反,可能有另一种类似于 GWT 生成器的方法,开发人员可以编写特殊的编译器插件并生成一些代码来支持序列化、RPC、DI 等。我们目前正在试验 JSON 序列化,我们在编译期间生成序列化程序-时间。如果我们得到好的结果,我们可能会开放我们的编译器插件 API,以便任何用户都可以实现类似的东西。

此外,我有一个具有类似目标的业余项目,它实现了自己的 metaprogramming API我用它来实现 large subset of Jackson serializer没有任何反射,以及JAX-RS client proxies .然而,我仍然未能插入其余的 Kotlin 团队采纳我的想法并为 Kotlin 编译器设计类似的东西。

目前,除了使用所谓的“穷人的 DI”之外,您什么都没有,因为 IoC 主要是设计模式,而不是库。借助 Kotlin 创建 DSL 的能力,我相信有可能创建一些不错的东西。

关于javascript - 如何在针对 JavaScript 的 Kotlin 中使用依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com