如何在play2.5中通过Application.injector()获得与泛型绑定的实例



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

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

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

在使用 WithApplication 的 junit 集成测试中,我使用标准的 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

现在,虽然有 Guice 本身的解决方案,但我似乎无法直接访问这些解决方案,并且 Play DI 抽象似乎不提供指定泛型的功能。

这个技巧似乎可以通过要求播放注入器包装器返回绑定的 Guice 注入器来获取 Guice 注入器:

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

最新更新