将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。
出了什么问题?
答案 0 :(得分:0)
线程有点旧,但是如果有人(像我一样)有相同的问题:正确的答案是在此问题的注释中,但可能被忽略了:guice Multibinder注入Java集合,而不是scala集合