【发布时间】:2019-11-07 19:10:34
【问题描述】:
我有一个 Play 应用程序,我正在使用用于 DI 的 Play 库,Guice 开箱即用。
我定义的一些播放模块相互依赖,为了让它们能够将一个绑定注入另一个,我试图在全局位置保留对 Play 注入器的引用,即
class MyApplicationLoader extends GuiceApplicationLoader() {
override def builder(context: ApplicationLoader.Context):
GuiceApplicationBuilder = {
val builder = super.builder(context)
Global.Injector = builder.injector()
builder
}
}
这在 Play 在 Dev 模式下运行时效果很好,但在 Production 模式下,调用 Global.Injector = builder.injector() 会导致循环依赖,因为它调用需要初始化 Global.Injector 的模块和绑定,但此时尚未初始化点。
我知道这可能与以下事实有关:在开发模式下,渴望单例首先初始化,而在生产模式中,渴望单例和常规单例一起初始化。
- 我理解对了吗?
- 我的方法有效吗?如何在生产模式下解决此问题?
【问题讨论】:
标签: scala dependency-injection playframework guice