【发布时间】:2016-04-25 08:30:36
【问题描述】:
我刚刚更新到 Play 2.5.2,我的过滤器(在登录时运行)给了我以下错误:
ProvisionException: Unable to provision, see the following errors:
1) Error injecting constructor, java.lang.RuntimeException: There is no started application
at filters.LoginFilter.<init>(LoginFilter.scala:15)
我不得不稍微修改我的代码以匹配 2.5.2 设置为过滤器的新更改:
import akka.stream.Materializer
import com.google.inject.Inject
import play.api.Play._
import play.api.cache.CacheApi
import play.api.mvc.Results._
import play.api.mvc.{Filter, RequestHeader, Result}
import scala.concurrent.{ExecutionContext, Future}
class LoginFilter @Inject() (implicit val mat: Materializer, ec: ExecutionContext) extends Filter {
}
我必须使用 Materializer 添加 @Inject 否则我会收到一条错误消息,指出该类应该是抽象的或应该实现 Materializer。
我该如何解决这个问题?谢谢!
【问题讨论】:
-
您的代码中的某些内容似乎需要一个正在运行的应用程序。通常的嫌疑人是 Play.current、Play.configuration 等。您可能必须显示整个过滤器类以及可能更多的堆栈跟踪。另外,第 15 行是哪几行?
-
有什么问题?似乎使用 DI 为您修复了它?
-
我也有同样的问题,但是用
GzipFilter代替。我想知道问题是否是已弃用的object控制器之一(而不是带有class .. @Inject()....的新控制器)导致在应用程序启动之前过早创建过滤器。转换为class ... @Inject()可以解决这个问题。 ——你找到解决办法了吗?
标签: scala playframework