7

Я переношу приложение Scala Play на 2.5 и в настоящее время переношу свои компоненты на инъекцию зависимости. Осталось одно место, где я не понимаю, как это сделать. У меня есть PathBindable неявного преобразования, определенное в объекте компаньона:Play Framework PathBindable с впрыском зависимостей

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

Реализация PathBindable должна искать объект из хранилища, но я не нашел способ зависимостей впрыснуть репозиторий здесь. В качестве обходного пути я использую теперь устаревший объект игры:

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

Любые идеи, как решить это правильно?

ответ

0

Я думаю, что это единственный способ доступа к подобным предметам в объектах.

Лучше Идея заключается в том, чтобы создать трансформатор, как это:

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

и чем вводить его услугами как этот

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

    ... 

} 

Надежда Вы получаете идею.

+1

Хм, проблема в том, что имплицитные должны быть доступны для маршрутов, чтобы я мог использовать их там: https://www.playframework.com/documentation/2.5.x/api/scala/index.html# play.api.mvc.PathBindable –

Смежные вопросы