Sci*_*ion 5 scala playframework playframework-2.5
我正在使用DI在Play 2.5中访问我的App:
import com.google.inject.{Inject, Provider}
import play.api.mvc._
import play.api.Application
class ApplicationController @Inject()(p: Provider[Application]) extends Controller {
implicit lazy val app = p.get()
println(app.hashCode()+"") // Random line to use the injected app
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ProvisionException: Unable to provision, see the following errors:
1) Tried proxying play.api.Application to support a circular dependency, but circular proxies are disabled. ...
Run Code Online (Sandbox Code Playgroud)
我浏览了Play迁移指南:https://www.playframework.com/documentation/2.5.x/Migration25#Handling-legacy-components
并按照他们所说的那样做以避免循环依赖,但是我仍然遇到该错误。
我还发现了一个我目前未使用的名为disableCircularProxies的变量(http://google.github.io/guice/api-docs/latest/api-diffs/changes/docdiffs_com.google.inject.html)我不确定该怎么做,因此几乎找不到相关信息。
任何想法如何解决这个循环依赖错误?
这是完整的堆栈跟踪:
Tried proxying play.api.Application to support a circular dependency, but circular proxies are disabled.
at play.api.DefaultApplication.class(Application.scala:221)
while locating play.api.DefaultApplication
while locating play.api.Application
at myCustomProject.controllers.ApplicationController.<init>(ApplicationController.scala:9)
while locating myCustomProject.controllers.ApplicationController
for parameter 1 at router.Routes.<init>(Routes.scala:31)
while locating router.Routes
while locating play.api.inject.RoutesProvider
while locating play.api.routing.Router
for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200)
while locating play.api.http.JavaCompatibleHttpRequestHandler
while locating play.api.http.HttpRequestHandler
for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221)
at play.api.DefaultApplication.class(Application.scala:221)
while locating play.api.DefaultApplication
while locating play.api.Application
Run Code Online (Sandbox Code Playgroud)
最终,我不应该使用此Provider [Application],而应使用App的配置,环境...。只是根据该文档,我应该能够进行该工作。
Java版本:
@Inject
private Provider<Application> application;
private void someMethod {
...
application.get();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |