Guice Multibinder不适用于Play Framework

时间:2016-11-07 20:03:33

标签: scala playframework dependency-injection guice

将Play 2.5.8与Scala 2.11.8一起使用。

我有一个特质RequestMatcher及其多个实现。我想在我的服务中注入Seq[RequestMatcher]。我的模块如下所示:

class FeignModule(environment: Environment, configuration: Configuration) extends AbstractModule with AkkaGuiceSupport {
  def configure() = {
    val requestMatcherBinder = Multibinder.newSetBinder(binder(), classOf[RequestMatcher])
    // TODO: Allow for user specified matchers
    requestMatcherBinder.addBinding().to(classOf[DefaultPathMatcher])
    requestMatcherBinder.addBinding().to(classOf[DefaultMethodMatcher])
    requestMatcherBinder.addBinding().to(classOf[DefaultQueriesMatcher])
    requestMatcherBinder.addBinding().to(classOf[DefaultHeadersMatcher])
    requestMatcherBinder.addBinding().to(classOf[DefaultBodyMatcher])

    // TODO: Allow for user specified actors
    bindActor[DefaultRecordingService]("recordingService")
  }
}

注射目标如下:

@javax.inject.Singleton
class FeignService @Inject()(@Named("recordingService") val recordingService: ActorRef,
                             val feignProperties: FeignProperties,
                             val matchers: Seq[RequestMatcher])
                            (implicit val ec: ExecutionContext) {
}

但是

  

play.api.UnexpectedException:意外异常[ProvisionException:   无法配置,请参阅以下错误:

     

1)没有实施   scala.collection.Seq是   界。找到位置   scala.collection.Seq       对于service.FeignService的第3个参数。(FeignService.scala:19)

我知道该模块是由Play读取的,因为Actor(FeignService的第一个参数)被正确注入。我也在类路径上有guice-multibindings jar。

出了什么问题?

1 个答案:

答案 0 :(得分:0)

线程有点旧,但是如果有人(像我一样)有相同的问题:正确的答案是在此问题的注释中,但可能被忽略了:guice Multibinder注入Java集合,而不是scala集合