当前位置: 首页 > 知识库问答 >
问题:

玩scala-通过Guice Injector的实例注入依赖项

狄誉
2023-03-14

我的应用程序使用Play-2.4。2/Scala-2.11。6提供了对DI的内置GUI支持

我所有的DAO都将实现绑定到下面的接口,这应该是Guice中最简单的方法

@ImplementedBy(classOf[PersonDAOImpl])
trait PersonDAO {
}

class PersonDAOImpl @Inject()
(
(@NamedDatabase("mysql")protected val dbConfigProvider: DatabaseConfigProvider,
 protected val cache : CacheApi) extends PersonDAO with SQLWrapper {
..
...

}

上述实现不需要添加任何模块来提供绑定。

现在由于某种原因,我不想使用@Inject注释将依赖项注入到Books类的构造函数中。所以我试着注射如下

class Books {

  val injector = Guice.createInjector()

  val personDAO : PersonDAO = injector.getInstance(classOf[PersonDAOImpl])

..
...

}

但这给我带来了一个guice配置异常,它说:

Caused by: com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for play.api.cache.CacheApi was bound.
  while locating play.api.cache.CacheApi
    for parameter 1 at schema.PersonDAOImpl.<init>
  while locating PersonDAO

2)  No implementation for play.api.db.slick.DatabaseConfigProvider annotated with @play.db.NamedDatabase(value=mysql) was bound.
  while locating play.api.cache.CacheApi
    for parameter 2 at schema.PersonDAOImpl.<init>  while locating PersonDAO

现在需要做什么?在这种情况下,我的方法是对的还是错的?有人能帮我解决这个问题吗?提前谢谢。

共有1个答案

司空胤
2023-03-14

您可以使用当前播放应用程序中的喷油器。

import play.api.{ Application, Play }
import play.api.inject.Injector

val currentApp: Application = Play.current
val injector: Injector = currentApp.injector
// in short play.api.Play.current.injector

// Then use the injector
import play.api.inject.ApplicationLifecycle
current.injector.instanceOf[ApplicationLifecycle].
  addStopHook { () => ??? }

(参见使用injector和ReactiveMongo的Play插件的示例)

 类似资料:
  • 我要的不是意见而是事实 我正在尝试选择一个新的DI。我有一些Guice的经验。总的来说,我想说它的一个优点是,当从scala需要与Java集成时,Guice可以完成这项工作。所以对于互操作性来说,这是一个明显的优势。 如果我们抛开这个互操作性问题不谈,谁能给我简单的比较一下 scaladi,guice,Macwire? 我对了解烫伤症还是新手。我发现令人惊讶的一件事是必须通过隐式参数在喷油器周围移

  • 我是Scala和PlayFramework的新手,我正试图弄清楚如何进行依赖注入。我基本上想要一个将成为特征的文件,并将其注入控制器。我的问题是我的Controller类没有看到我的特性这是我的代码 个人资料性状 然后我尝试将其注入我的控制器 然而,我的控制器没有看到它,我试图按照这里的例子https://www . play framework . com/documentation/2.5 .

  • 在不讨论原因的情况下,假设有人想要一个老式的Play Framework web服务,并且不想使用依赖注入,也不想依赖Google的Guice。在玩法2.8.x中还可能吗? 有没有一个简单的方法可以让你不去这里就呆在老学校里? 我承认,但不完全理解https://www.playframework.com/documentation/2.4.x/migration24。我认为我的问题与2.7中删除

  • 试图创建一个自定义的,我可以通过Jersey注入到我的资源中。 这在本问题的Java中有涉及。我已经阅读了有关这方面的文档,这些文档也是用Java编写的。最后,GitHub中的一些代码涵盖了相同的主题(通过Dropwizard完成)。 这将全部编译,但在运行时失败,出现以下异常 我不知道是我在向Scala的转换中犯了错误,还是我在注册绑定器时做了错误的事情。

  • 本文向大家介绍php中的依赖注入实例详解,包括了php中的依赖注入实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php中的依赖注入。分享给大家供大家参考,具体如下: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 我到现在依然不大明白上面“依赖注入”的定义是什么…… 有兴趣可以参考下《PHP之道》上面对“依赖注入”的 解释。 htt

  • 我来自Java背景,也是函数范式的新手,所以请原谅我,我身上有OOP的味道。 我有一个特征名称付款处理程序 和 直到这里一切都很好,但是当我想拥有多个基于付款方式的支付网关时,问题就来了。最初我写了一个像 PaymentHandlerFactory 这样的 然后使用这个PaymentHandlerFactory获取guice注入的PayPal对象。但不知怎的,我觉得这不是正确的方法,于是我找到了同