7

我正在将 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]

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

4

2 回答 2

3

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

于 2016-04-14T09:32:50.153 回答
0

我认为这是您可以在对象中访问此类内容的唯一方法。

一个更好的主意是创建一个像这样的转换器:

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

而不是将它注入这样的服务中

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

   ... 

}

希望你明白。

于 2016-04-05T13:07:54.977 回答