我正在将play应用程序从2.4迁移到2.8。我已经成功地调整了应用程序,并在一定程度上运行了它,但我目前仍被一个对注入器的调用所困扰。
当前代码为:
private final TestDB testdb = play.api.Play.current().injector().instanceOf(TestDB.class);
这是早期版本游戏中推荐的方法。但是,play.play和play.api.play从2.5版开始就被弃用了:https://www.playframework.com/documentation/2.8.x/migration25#deprecated-play.play和play.api.play-methods
下一个选项是使用guicedi,正如迁移指南所解释的那样,使用@inject,它已经在大多数应用程序中使用并工作了。然而,根据我的理解,“来自自定义类的注入,它不是自己注入的,应该通过显式调用注入程序来完成”(http://www.codepreference.com/2016/07/guice-dependency-injection-in-play.html)如果我尝试,那么实际上依赖关系不会被注入,并且这些变量的值为null。因此,如果我理解正确,@inject不是一个选项,因为类是在注入机制之外示例化的(根据我在代码中看到的,它使用“new”)
因为论坛上提到过,我试着:
@Inject private play.api.inject.Injector injector;
private final TestDB testdb = injector.instanceOf(TestDB.class);
这显然也不起作用,因为没有任何东西被注射,包括注射器。
父示例(x调用)确实注入了这些依赖项,作为解决方案,我可以传递它们,但我觉得必须有一个更优雅的解决方案。所以我的实际问题是:在Play2.8中有没有一种方法可以检索应用程序使用的喷油器示例?
也许我错过了一些非常简单的东西,我是一个新的发挥和guice迪,所以任何帮助将不胜感激。我在网上找到的所有解决方案都引用了play的旧版本,它允许直接访问injector或application对象。重头戏2.8中的示例还展示了如何检索喷油器,但仅限于(单元)测试的情况。而且,它主要是用java编写的,而不是scala。
暂无答案!
目前还没有任何答案,快来回答吧!