DI或服务定位器:在scala中运行时注入实现(无静态绑定)

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

我有一个用例,我想提供一个简单的API来扩展scala应用程序的功能

我花了几天时间试图找到一个java/scala DI框架或库,它可以为我完成以下任务:

  • 标识类路径上接口/特征的实现
  • 在标记有注释的站点上实例化并注入所述实现(重要特性:所有实现)
  • 上述情况不能在编译器中发生,因为我需要一个插件体系结构,在JVM启动之前不引入插件
  • 因此,上述情况可以在JVM启动时发生(无需热交换)
  • 我越来越倾向于OSGi DS,我是它的忠实粉丝,但我认为这是由于#4的过度使用

    我看了看guice、weld、scaladi和macwire,无法立即找到一种简单的方法来实现这一点。我的目标是让“插件”作者不必以任何方式知道我的注入/IoC解决方案,除了注入站点的偶尔注释(最好是JSR330),我愿意处理更丑陋的事情。:-)

    我必须在这里推出我自己的解决方案,使用OSGi,还是在上述库中遗漏了一些琐碎的东西


    ps:我试图避开OSGi,主要是因为它与我正在使用的应用程序框架交互(akka-不确定bundle/DS生命周期是否与单参与者系统很好地混合)

    我现在看看bundle/DS提供了哪些功能。我发现它已经足够成熟了。因此,使用这个DI库来实现您的目标并不难。例如,您只能实现用于搜索在某些配置文件或任何其他文件中特别注释/指定的代码

    如果你喜欢DS(它似乎非常适合你的问题),那么为什么不用Akka解决任何问题呢?我确信其他人会愿意帮忙,因为这看起来是一个有趣的组合。

    如果你能负担得起,最好(不仅对你,而且对整个生态系统)接受彼得的建议


    不过,从实际角度讲,Java带来了OOTB,这可能是在您的特定情况下最简单的方法。

    对不起,我不确定我是否理解您的最后一句话。我想避免创建绑定,因为我不知道具体的类型。但现在我认为以某种“容器模块”的方式实现模块的编程连接(其中包含静态绑定)可能是我唯一的选择way@pghn这正是我一直在谈论的,在运行时搜索和初始化组件。乍一看,这看起来很完美。我会全力以赴的。谢谢这就是你想要的——使用Macwire的插件吗