我有一个Play应用程序,并且正在使用DI的Play库,而Guice开箱即用。
我正在定义的一些播放模块相互依赖,为了使它们能够将自己的绑定注入另一个绑定中,我试图在全局位置保留对Play注入器的引用,即
Global.Injector = builder.injector()
当Play在开发模式下运行时,此方法效果很好,但是在生产模式下,调用Global.Injector
会导致循环依赖,因为它调用需要初始化{{1}}的模块和绑定,但并非如此尚未初始化。
我知道这可能与以下事实有关:在开发模式下,急切的单身人士首先被初始化,而在生产模式下,急切的单身人士和常规单身人士被一起初始化。
答案 0 :(得分:1)
我试图在全球范围内保留对Play注射器的引用
在大多数情况下,这是不必要的,您应该尝试避免这种情况。
要解决您的问题,您似乎只需要使用Provides批注,一个简单的示例就是这样:
class MyModule extends AbstractModule {
@Provides
def complexConstructor(a: ObjA, b: ObjB): ComplexClass = ???
}
这种方法应该没有任何问题。