假设我有一个依赖于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控制器之间存在循环依赖关系。有没有更好的实施建议?
非常感谢!