7

Sto migrando un'applicazione Scala Play a 2.5 e sto attualmente spostando i miei componenti sull'integrazione delle dipendenze. C'è un posto a sinistra dove sono in perdita come farlo però. Ho un PathBindable conversione implicita definito nell'oggetto compagna:Play Framework PathBindable with Dependency Injection

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

L'attuazione del PathBindable ha bisogno di guardare l'oggetto da un repository, ma non ho trovato il modo di dipendenza a iniettare il repository qui. Come soluzione temporanea sto utilizzando l'oggetto Play ora deprecato:

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

Qualche idea su come risolverlo correttamente?

risposta

0

Penso che questo sia l'unico modo per accedere a cose come questa negli oggetti.

Un'idea migliore è quella di creare un trasformatore come questo:

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

e di iniettarlo in servizi come questo

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

    ... 

} 

Spero la si ottiene l'idea.

+1

Hm, il problema è che l'implicito deve essere disponibile per i percorsi in modo che io possa utilizzarlo lì: https://www.playframework.com/documentation/2.5.x/api/scala/index.html# play.api.mvc.PathBindable –

Problemi correlati