如何使用Kotlin定向JavaScript的依赖注入?

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

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

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

在Kotlin中支持JavaScript编译器的反思是一件棘手的事情。 最糟糕的是,你必须以某种方式将元数据存储在JS文件中,这使得JS文件很大,而不像JAR那样大,所以拥有小JS文件是非常重要的。 另外,你必须捆绑解压这个元数据的代码,并且暴露反射API,这使得生成的JS代码更大。

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

另外,我有一个有着相似目标的业余时间项目,它实现了自己的元编程API ,我使用它来实现Jackson序列化器的大部分子集,而没有任何反射,还有JAX-RS客户端代理 。 然而,我仍然没有推动剩下的Kotlin团队采纳我的想法,并为Kotlin编译器设计类似的东西。

目前,除了使用所谓的“穷人DI”之外,你什么都没有,因为IoC大多是设计模式,而不是图书馆。 有了创建DSL的Kotlin功能,我相信可以创造一些不错的东西。