为什么Play中的控制器方法!框架是静态的

时间:2012-12-31 11:52:26

标签: dependency-injection playframework guice playframework-1.x

我正在使用Play!框架1.2.5用于我的一个应用程序。最初我通过创建类的新实例或使用工厂来解析依赖项。但是我的应用程序不断增长,以这种方式管理依赖项变得更加困难。我将转向使用Google Guice的依赖注入

看起来,对于每个控制器,我都要编写

requestStaticInjection(MyController.class);

在控制器中注入服务

@Inject
static MyService mySerivce;

这令人沮丧,我不喜欢控制器有静态方法,只能访问静态变量。我想将依赖项传递给控制器​​的构造函数,我不想声明静态字段。

为什么播放控制器的方法是静态的?这是一种限制吗?是否有其他好方法将类注入Play!控制器

2 个答案:

答案 0 :(得分:1)

老问题,但我遇到了同样的问题,我在这里找到了答案http://typesafe.com/blog/announcing-play-framework-21-the-high-velocit但是,它不是和你使用的Play版本相同......

  

Play 2.1现在支持一种新的路由语法,可以调用注入的控制器而不是静态方法。只需在路径文件中使用“@”符号

作为控制器方法的前缀
GET     /                  @controllers.Application.index()
在你的conf / routes中

答案 1 :(得分:0)

  

还有其他好方法可以将类注入Play!控制器

没有。您不应该在控制器中创建服务 - 使其成为不扩展Controller的常规类。然后从您的控制器调用服务类。将控制器代码保持在最低限度 - 那里有很多字节码魔法,所以保持控制器代码简单(查找对象,渲染结果,那种东西)