使用依赖注入来玩框架PathBindable

我将一个Scala Play应用程序迁移到2.5,并且正在将我的组件移动到依赖注入。 还有一个地方我不知道如何去做。 我在伴随对象中定义了一个PathBindable隐式转换:

object Task {
  implicit def pathBindable(implicit stringBinder: PathBindable[String]) =
    new PathBindable[Task] {
       ...
    }
}

PathBindable的实现需要从存储库中查找对象,但我还没有找到在这里依赖注入存储库的方法。 作为一种解决方法,我使用现在弃用的Play对象:

val tasks = Play.application(Play.current).injector.instanceOf[TasksRepository]

任何想法如何正确解决这个问题?


根据Lightbend Engineer Greg Methvin的说法,PathBindables只应该依赖路径中的状态。 原因是代码在IO线程上运行,因此应该快速且不会阻塞。


我认为这是你在对象中访问像这样的东西的唯一方法。

更好的想法是创建一个像这样的变压器:

class TaskPathBinder @Inject() ( tasks : TaskRepository ) extends PathBindable[Task]{
  // implementiation
}

而不是像这样的服务注入它

class NeedsTaskPathBinder @Inject() ( service : SomeSerive ) (implicit taskPathBinder : TaskPathBinder) {

   ... 

}

希望你明白这个主意。

链接地址: http://www.djcxy.com/p/33263.html

上一篇: Play Framework PathBindable with Dependency Injection

下一篇: How to hook Luis into a Bot Framework FormDialog