DI或服务定位器:在scala中运行时注入实现(无静态绑定)
我有一个用例,我想提供一个简单的API来扩展scala应用程序的功能 我花了几天时间试图找到一个java/scala DI框架或库,它可以为我完成以下任务:DI或服务定位器:在scala中运行时注入实现(无静态绑定),scala,osgi,guice,weld,macwire,Scala,Osgi,Guice,Weld,Macwire,我有一个用例,我想提供一个简单的API来扩展scala应用程序的功能 我花了几天时间试图找到一个java/scala DI框架或库,它可以为我完成以下任务: 标识类路径上接口/特征的实现 在标记有注释的站点上实例化并注入所述实现(重要特性:所有实现) 上述情况不能在编译器中发生,因为我需要一个插件体系结构,在JVM启动之前不引入插件 因此,上述情况可以在JVM启动时发生(无需热交换) 我越来越倾向于OSGi DS,我是它的忠实粉丝,但我认为这是由于#4的过度使用 我看了看guice、weld、s
ps:我试图避开OSGi,主要是因为它与我正在使用的应用程序框架交互(akka-不确定bundle/DS生命周期是否与单参与者系统很好地混合)我现在看看bundle/DS提供了哪些功能。我发现它已经足够成熟了。因此,使用这个DI库来实现您的目标并不难。例如,您只能实现用于搜索在某些配置文件或任何其他文件中特别注释/指定的代码 如果你喜欢DS(它似乎非常适合你的问题),那么为什么不用Akka解决任何问题呢?我确信其他人会愿意帮忙,因为这看起来是一个有趣的组合。如果你能负担得起,最好(不仅对你,而且对整个生态系统)接受彼得的建议
不过,从实际角度讲,Java带来了OOTB,这可能是在您的特定情况下最简单的方法。对不起,我不确定我是否理解您的最后一句话。我想避免创建绑定,因为我不知道具体的类型。但现在我认为以某种“容器模块”的方式实现模块的编程连接(其中包含静态绑定)可能是我唯一的选择way@pghn这正是我一直在谈论的,在运行时搜索和初始化组件。乍一看,这看起来很完美。我会全力以赴的。谢谢这就是你想要的——使用Macwire的插件吗