使用依赖注入来玩框架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