如何通过Play2.5中的Application.injector()获取Generic绑定实例

时间:2018-01-22 04:22:56

标签: java playframework-2.0 guice

我无法通过应用程序界面访问Play2测试中的guice绑定实例。

使用Play2.5,假设一个应用程序使用Guice for DI,其Guice模块具有:

@Singleton
@Provides
protected MyThing<String, Foo, Bar> createMyThing() {
}

在使用WithApplication的junit Integration测试中,我使用标准的play2类执行此操作:

public class ApplicationTest extends WithApplication {

    private Application playApp;

    @Override
    protected Application provideApplication() {
        playApp = new GuiceApplicationBuilder().build();
    }

    @Test
    public void testInject() {
        playApp.injector().instanceOf(new BindingKey<>(MyThing.class));
    }
}

失败
No implementation for MyThing was bound

即使在调试器中,我看到Guice注入器有一个绑定:

MyThing<String, Foo, Bar> -> instance

现在虽然有solutions for Guice itself,但我似乎无法直接访问这些,而Play DI抽象似乎无法指定泛型。

1 个答案:

答案 0 :(得分:0)

这个黑客似乎通过要求播放器包装器返回绑定的Guice注入器来获取Guice Injector:

play.inject.Injector playInjector = playApp.injector();
com.google.inject.Injector guiceInjector = playInjector.instanceOf(com.google.inject.Injector.class);