如何获取当前控制器的参考?

时间:2015-08-29 04:42:06

标签: scala dependency-injection playframework-2.4

假设我有一个依赖于GeoLocation服务的控制器来从请求中获取用户位置:

class Application extends Controller {

    @Inject var geo : GeoService

    def index = Action { implicit request =>
        Ok(geo.userLocation(request).toString())
    }
}

GeoService的界面如下:

trait GeoService {

    def userLocation(request : Request) : LocInfo   // detect user location from incoming http request

}

绑定到上述特征的GeoService的特定实现

class Locator extends GeoService {

     @Inject var controller : Controller

     def userLocation(request : Request) : LocInfo = {
          // .... check cookies included in the request to see if location is previously set
     }

}

我想重用Playframework的基本控制器实现提供的session()方法来获取传入请求提供的会话:

controller.session(request)

因此我假设我必须注入一个处理请求的控制器实例到Locator类。

但我不知道如何以确保注入的Controller实例是生成处理请求的操作的控制器的方式实现此目的。

此外,Locator和Application控制器之间存在循环依赖关系。有没有更好的实施建议?

非常感谢!

0 个答案:

没有答案