2016-04-25 30 views
1

我剛纔已經更新到2.5.2播放,和我的過濾器(它運行在登錄)給了我以下錯誤:升級後打2.5:錯誤注入構造

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 。

我該如何解決這個問題?謝謝 !

+0

東西在你的代碼似乎都需要運行的應用程序。常見的嫌疑人是Play.current,Play.configuration等。您可能必須顯示整個過濾器類和可能更多的堆棧跟蹤。另外,哪一行號碼是15? – rethab

+0

問題是什麼?它似乎使用DI爲你解決它? –

+0

我有同樣的問題,但用'GzipFilter'代替。我想知道如果問題是一個不推薦使用的'object'控制器(而不是使用'class .. @Inject()....')的新控件導致過濾器在應用程序之前被創建得太早已開始。而轉換爲'class ... @Inject()'會解決這個問題。 - 你找到了解決方案嗎? – KajMagnus

回答

1

我其實並不確定這一個,老實說我不知道​​差異,但在我所有的文件中有javax.inject不是谷歌注入,所以它可能值得一試。

相反的:

import com.google.inject.Inject 

嘗試:

import javax.inject.Inject 
+0

不幸的是,它不能解決問題。 – Scipion

+0

無論你使用的是Google的註釋還是來自javax的註釋,只要你堅持使用guice,都不應該擔心。爲了讓你的代碼獨立於DI容器,你可能想要使用javax。 – rethab

+0

@rethab,很高興知道,謝謝 –