I'm migrating a Scala Play application to 2.5 and am currently moving my components to dependency injection. There's one place left where I'm at a loss how to do it though. I have a PathBindable implicit conversion defined in the companion object:
object Task { implicit def pathBindable(implicit stringBinder: PathBindable[String]) = new PathBindable[Task] { ... } }
The implementation of the PathBindable needs to look up the object from a repository, but I haven't found a way to dependency-inject the repository here. As a workaround I'm using the now deprecated Play object:
val tasks = Play.application(Play.current).injector.instanceOf[TasksRepository]
Any ideas how to solve this properly?
1 Answers
Answers 1
I think this is the only way you can access stuff like this in objects.
A better idea is to create a the transformer like this:
class TaskPathBinder @Inject() ( tasks : TaskRepository ) extends PathBindable[Task]{ // implementiation }
and than inject it in services like this
class NeedsTaskPathBinder @Inject() ( service : SomeSerive ) (implicit taskPathBinder : TaskPathBinder) { ... }
Hope the you get the idea.
0 comments:
Post a Comment