运维开发网

如何在Kotlin定位JavaScript中使用依赖注入?

运维开发网 https://www.qedev.com 2020-07-11 09:00 出处:网络 作者:运维开发网整理
我目前正在评估将大型 Java / Swing应用程序移植到Kotlin.应用程序的领域是2D图形,图形,图形编辑和模拟/动画.我想在Kotlin中重写整个应用程序核心,并将其转换为Java字节代码以及 JavaScript.我现在能够编写Kotlin绘图代码,使用一些适配器和桥接类在Java窗口和HTML画布中呈现这些代码.到现在为止还挺好. 现在我正在努力使用依赖注入,我正在我的应用程序中大量
我目前正在评估将大型 Java / Swing应用程序移植到Kotlin.应用程序的领域是2D图形,图形,图形编辑和模拟/动画.我想在Kotlin中重写整个应用程序核心,并将其转换为Java字节代码以及 JavaScript.我现在能够编写Kotlin绘图代码,使用一些适配器和桥接类在Java窗口和HTML画布中呈现这些代码.到现在为止还挺好.

现在我正在努力使用依赖注入,我正在我的应用程序中大量使用.我想在我的Kotlin类中注入依赖项,并且仍然能够将它们转换为JVM和JavaScript,因此我为Kotlin寻找DI框架.我找到了injekt和kodein,但看起来它们都依赖于JDK类,因此它们不适用于我的JavaScript用例.因此,我开始开发自己的纯Kotlin DI框架,直到我意识到用于JavaScript的Kotlin转换器还不支持反射,没有它我就不能进行依赖注入.

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

支持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的能力,我相信可以创造出美好的东西.

0

精彩评论

暂无评论...
验证码 换一张
取 消