Thursday, April 14, 2016

Play Framework PathBindable with Dependency Injection

Leave a Comment

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.

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment