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

时间:2016-12-27 10:50:40

标签: javascript dependency-injection kotlin

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

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

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

1 个答案:

答案 0 :(得分:0)

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