在没有Play框架的情况下,如何在Scala中使用依赖项注入?
我有使用Scala和Play开发基于web的应用程序的经验。Play支持Guice开箱即用,因此使用Play进行DI非常容易 我目前正在处理一个Scala项目,它不是web应用程序,也不使用Play。我想动态地将config对象注入到一些地方。我该怎么做 如果需要使用一些库来进行DI,那么哪个库适合此目的?有样本代码吗?是否可以在不使用任何外部库的情况下使用纯Scala实现这一点?当我在没有播放的情况下搜索Scala DI时,所有结果都是播放的在没有Play框架的情况下,如何在Scala中使用依赖项注入?,scala,dependency-injection,Scala,Dependency Injection,我有使用Scala和Play开发基于web的应用程序的经验。Play支持Guice开箱即用,因此使用Play进行DI非常容易 我目前正在处理一个Scala项目,它不是web应用程序,也不使用Play。我想动态地将config对象注入到一些地方。我该怎么做 如果需要使用一些库来进行DI,那么哪个库适合此目的?有样本代码吗?是否可以在不使用任何外部库的情况下使用纯Scala实现这一点?当我在没有播放的情况下搜索Scala DI时,所有结果都是播放的 提前谢谢 我不太确定,但我认为您仍然可以使用 co
提前谢谢 我不太确定,但我认为您仍然可以使用 com.google.inject%guice%4.2.2 并实现类似的功能
class Module extends com.google.inject.AbstractModule {
protected def configure() = {
// Example Usage:
bind(classOf[ClassNameToInjected]).asEagerSingleton()
}
}
希望能有所帮助。游戏与依赖注入无关。它由广泛使用的JavaDI库处理 为了掌握Guice的主要概念,我建议您阅读。我喜欢使用 设置 将此行添加到build.sbt文件: 然后重新加载。 注意,提供了作用域,因此不会增加任何运行时开销。它使用宏在编译时完成它的工作。这意味着您将获得一个编译时依赖项注入,如果您缺少一个依赖项,那么您将尽快找到它,并出现编译时错误,而不是运行时异常 代码示例 让我们定义两个服务,X和Y,以及一些依赖项A、B和C,以便以后使用它们: 案例类别A B类案件 案例C类 案例类别Xa:A、b:b 案件类别Yc:C 现在,让我们在世界尽头的主函数附近连接我们的依赖项: 导入com.softwaremill.macwire_ 延迟值a=导线[a] 延迟值b=导线[b] 延迟值c=导线[c] 延迟值x=导线[x] 延迟值y=导线[y] 编译器将上述代码转换为以下代码: 懒惰的val a=新的a 延迟值b=新值b lazy val c=新c 延迟值x=新的Xa,b lazy val y=新的Yc 正如您在文章中所问的,这基本上是用普通Scala代码实现的 更改依赖项 这里有一件好事,当其中一个服务通过添加/删除依赖项进行更改时,您的连接代码将保持不变。 例如,让我们将服务Y更改为也需要B作为依赖项 我们的服务和依赖项如下所示: 案例类别A B类案件 案例C类 案例类别Xa:A、b:b 案例类别Yb:B,c:c 接线代码将保持不变 编译器将接线代码转换为: 懒惰的val a=新的a 延迟值b=新值b lazy val c=新c 延迟值x=新的Xa,b lazy val y=新的Yb,c
libraryDependencies += "com.softwaremill.macwire" %% "macros" % "2.3.2" % Provided